Hallo, ich hab ein Array das 100 Dezimalzahlen enthält. Nun möchte ich die 5 besten bzw. größten Zahlen davon ermitteln. Wie könnte ich dies in C# realisieren? Danke im voraus.
Ingo wrote: > Hallo, ich hab ein Array das 100 Dezimalzahlen enthält. > Nun möchte ich die 5 besten bzw. größten Zahlen davon ermitteln. > Wie könnte ich dies in C# realisieren? Danke im voraus. Array sortieren. die ersten 5 Einträge sind deine gesuchten Zahlen
Karl heinz Buchegger wrote: > Ingo wrote: >> Hallo, ich hab ein Array das 100 Dezimalzahlen enthält. >> Nun möchte ich die 5 besten bzw. größten Zahlen davon ermitteln. >> Wie könnte ich dies in C# realisieren? Danke im voraus. > > Array sortieren. > die ersten 5 Einträge sind deine gesuchten Zahlen Nicht die letzten? Ausser man sortiert absteigend.
Severino R. wrote: > Karl heinz Buchegger wrote: >> Ingo wrote: >>> Hallo, ich hab ein Array das 100 Dezimalzahlen enthält. >>> Nun möchte ich die 5 besten bzw. größten Zahlen davon ermitteln. >>> Wie könnte ich dies in C# realisieren? Danke im voraus. >> >> Array sortieren. >> die ersten 5 Einträge sind deine gesuchten Zahlen > > Nicht die letzten? Ausser man sortiert absteigend. Ein bischen was zum Nachdenken sollte für den TO ja auch bleiben :-)
Karl heinz Buchegger wrote: > Ingo wrote: >> Hallo, ich hab ein Array das 100 Dezimalzahlen enthält. >> Nun möchte ich die 5 besten bzw. größten Zahlen davon ermitteln. >> Wie könnte ich dies in C# realisieren? Danke im voraus. > > Array sortieren. > die ersten 5 Einträge sind deine gesuchten Zahlen Warum immer gleich sortieren?
1 | int[] inputArray = ...; |
2 | int[] h5 = new int[5]; |
3 | h5[0] = h5[1] = h5[2] = h5[3] = h5[4] = int.MinValue; |
4 | foreach (int i in inputArray) { |
5 | if (i > h5[0]) { |
6 | h5[4] = h5[3]; |
7 | h5[3] = h5[2]; |
8 | h5[2] = h5[1]; |
9 | h5[1] = h5[0]; |
10 | h5[0] = i; |
11 | } else if (i > h5[1]) { |
12 | h5[4] = h5[3]; |
13 | h5[3] = h5[2]; |
14 | h5[2] = h5[1]; |
15 | h5[1] = i; |
16 | } else if (i > h5[2]) { |
17 | h5[4] = h5[3]; |
18 | h5[3] = h5[2]; |
19 | h5[2] = i; |
20 | } else if (i > h5[3]) { |
21 | h5[4] = h5[3]; |
22 | h5[3] = i; |
23 | } else if (i > h5[4]) { |
24 | h5[4] = i; |
25 | }
|
26 | }
|
Wenn mehrere gleiche Zahlen vorkommen dürfen funktioniert allerdings u.U. weder die Lösung mit Sortieren noch diese hier (die aber entsprechend angepasst werden können...).
Irgendwo haben wir ja auch mal was von Selection Sort, Bubble Sort, Insertion Sort und so gehört....... ;)
Daniel V. wrote: > Irgendwo haben wir ja auch mal was von Selection Sort, Bubble Sort, > Insertion Sort und so gehört....... ;) Ja, und die .NET Entwickler auch, deshalb haben sie eine Array.Sort() Methode implementiert.
Darfs auch ein Einzeiler sein? (inkl. Sortierung und Ausschluss von Werten die mehrfach vorkommen?) int[] arr = new int[] { 3, 3, 3, 9, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 20, 20 }; List<int> l = new List<int>(from i in arr.Distinct() orderby i select i); foreach (int i in l) Console.WriteLine(i);
Vielen Dank für eure bisherige Hilfe.
1 | public int[] BubbleSort(int[] _Liste) |
2 | {
|
3 | int xSize = _Liste.Length; |
4 | int xVar1; |
5 | int xVar2; |
6 | int xvar3; |
7 | for (xVar1 = (xSize - 1); xVar1 >= 0; xVar1--) |
8 | {
|
9 | for (xVar2 = 1; xVar2 <= xVar1; xVar2++) |
10 | {
|
11 | if (_Liste[xVar2 - 1] > _Liste[xVar2]) |
12 | {
|
13 | xvar3 = _Liste[xVar2 - 1]; |
14 | _Liste[xVar2 - 1] = _Liste[xVar2]; |
15 | _Liste[xVar2] = xvar3; |
16 | }
|
17 | }
|
18 | }
|
19 | return _Liste; |
20 | }
|
Ich verwende als Sortieralgo den BubbleSort. Nun ist es aber so das ich zum Schluss wissen muss, wie die Position bzw. Index der sortierten Zahlen lautet.Wie kann man da realisieren?
Ingo wrote:
> Ich verwende als Sortieralgo den BubbleSort.
Warum erfindest Du das Rad neu?
Nur als Prinzip (die Implementierung wird man ein klein wenig anders machen) Du hast zb folgendes Array { 8, 2, 7, 1 } jetzt machst du dir ein 2-tes Array dazu, welches du mit den Wert 0 bis zum höchsten Index füllst. { 8, 2, 7, 1 } { 0, 1, 2, 3 } Wenn immer du in deinem Sortierverfahren, 2 Einträge vertauscht, dann tust du das auch mit deinem 2-ten Array. Wenn also ein Sortierschritt erfordert, die 8 mit der 2 zu vertauchen, so vertauscht du im 2-ten Array die 0 mit der 1 Aus { 8, 2, 7, 1 } { 0, 1, 2, 3 } wird dann { 2, 8, 7, 1 } { 1, 0, 2, 3 } usw. usw. Ist dein erstes Array dann irgendwann fertig sortiert, dann landest du bei { 2, 1, 7, 8 } { 1, 3, 2, 0 } Der dritte Eintrag ist zb. im sortierten Array die 7. Aber in deinem originalen Array war die 7 an Position 2 (der dritte Eintrag in deinem 2-ten Array).
Karl heinz Buchegger wrote: > Ein bischen was zum Nachdenken sollte für den TO ja auch bleiben :-) Dass Du dich immer wieder dazu erweichen lässt... naja, jedenfalls Kompliment, Du kannst wirklich gut darstellen und erklären. Meistens jedenfalls: > Ist dein erstes Array dann irgendwann fertig sortiert, dann landest du > bei > > { 2, 1, 7, 8 } > { 1, 3, 2, 0 } *Fertig sortiert?* Ich denke jedoch, Sortieralgorithmen sind im Web zur Genüge erklärt worden. Die Frage ist doch eher, gibt es in .NET eine saubere TOP(n) Funktion (ähnlich wie in SQL) oder muss man die Zahlen selber suchen.
Severino R. wrote: >> Ist dein erstes Array dann irgendwann fertig sortiert, dann landest du >> bei >> >> { 2, 1, 7, 8 } >> { 1, 3, 2, 0 } > > *Fertig sortiert?* Mpfh. Da muss ich jetzt selber schmunzeln :-) > Die Frage ist doch eher, gibt es in .NET eine saubere TOP(n) Funktion > (ähnlich wie in SQL) oder muss man die Zahlen selber suchen. Keine Ahnung.
Severino R. wrote: > Die Frage ist doch eher, gibt es in .NET eine saubere TOP(n) Funktion > (ähnlich wie in SQL) oder muss man die Zahlen selber suchen. Ist TOP(n) mittlerweile im SQL-Standard? Linq-Variante mit Take
1 | var result = inputArray.Select((number, index) => new { value = number, pos = index }).OrderByDescending(x => x.value).Take(5); |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.