Um ganze zahlen In Aufsteigender und Absteigender Bestellungen
Arbeite ich mit Objective-C, aber wahrscheinlich ist es egal, die Programmiersprache für das. Also im Grunde ich habe ein array mit sagen, die zahlen 12, 5 und 17, und ich möchte in der Lage sein zu ziehen, die größte Zahl, oder der kleinste oder zweitkleinste, usw.
Grundsätzlich möchte ich in der Lage sein, um Sie zu Sortieren in aufsteigender oder absteigenden Reihenfolge, so dass ich herausgreifen, zum Beispiel, die zweitkleinste Anzahl von abrufen der objectAtIndex: 1
wenn es in aufsteigender Reihenfolge sortiert wird. Ich fühle mich wie das ist unglaublich offensichtlich, aber ich kann mir nicht denken, wie es zu tun im moment, so würde ich es lieben, wenn jemand könnte mich aufklären.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine
NSArray
mitNSNumber
Instanzen, dann die Art, die Sie suchen, ist so einfach wie diese:Wird es aufsteigend Sortieren, so
[sortedNumbers lastObject]
wird der größte Wert.Es gibt noch viele weitere Sortierverfahren auf
NSArray
wenn Sie mehr spezifische Bedürfnisse. NSArray SortierensortedArrayUsingSelector:
nicht Sortieren im Ort. Es gibt ein neues array mit den sortierten Werte, die ursprüngliche array bleibt unverändert.Fast jede high-level-Sprache, einschließlich objective-c Bibliothek um ein array Sortieren. Aber wie du gesagt hast, die Sprache spielt keine Rolle, wahrscheinlich suchst du den Algorithmus selbst. Es gibt eine Reihe Sortier-algorithmen mit unterschiedlicher Komplexität. Sie finden Sie in jedem standard-Algorithmus buchen. Oder diese 2 Seiten die hilfreich sein könnten:
Und wenn Sie interessiert sind, vor allem in objective-c, überprüfen Sie die Sortier-Sektion von NSArray Referenz. Diese enthält ein Beispiel zum Sortieren eines Arrays von integer.
Sortieren Sie das array in aufsteigender Reihenfolge (ich glaube nicht, verwenden Sie objective-C, aber ich bin sicher, es gibt eine Funktion dafür) und dann Holen Sie das element, wo immer Sie wollen...
Um die größte
Zweitgrößte
Kleinste
Zweitkleinste
Sollten Sie überprüfen, um sicherzustellen, dass der array-index gilt:
Oder:
Sehen Sie hier, wie Sie ein array Sortieren in objective C:
http://howtomakeiphoneapps.com/2009/03/how-to-sort-an-array-in-objective-c/
Wenn Sie möchten, beibehalten der Reihenfolge der original-array, eine Methode zu schaffen, ist ein zweiter array enthält nur die zahlen 0, 1, ... n, Vertretung von Indizes in die erste Reihe. Dann Sortieren Sie das zweite array, sondern der Vergleich der Werte, vergleichen Sie die entsprechenden Werte, die Sie Punkte, um in die erste Reihe. (Das könnte man auch speichern nur Zeiger und Sortieren Sie basierend auf den Zeiger dereferenziert.)
Dann zu finden, die zweite-größte Zahl, den index in die zweite-to-Letzte position in der zweiten Reihe und sehen, wo Sie Punkte, um in die erste Reihe.
Wenn Sie möchten, zu bekommen, Lust und vermeiden, Sortieren, dieser Vortrag beschreibt einen Algorithmus für das finden der k-größte element in der linearen Zeit. Ich habe nicht wirklich verwendet, aber es sieht aus wie es könnte eine gute Methode, wenn Sie Ihre Daten ändern sich oft, als würden Sie nicht haben, um halten Sie die extra array.
Wenn Ihr Ziel ist es, die höchste Zahl oder die niedrigste, oder zweitniedrigste, oder was haben Sie, und Sie brauchen nur eine Zahl aus dem Ergebnis, dann ist die Sortierung overkill. Stattdessen sollte man gerade iteriert über das gesamte array und verfolgen der höchsten (oder niedrigsten, oder 2 niedrigste (für den zweit-niedrigst)) Anzahl bisher gesehen. Wenn Ihre Sprache dies unterstützt, es wird als "fold". Der einzige Grund, um tatsächlich im array sortiert ist, müssen Sie den Zugriff auf mehrere verschiedene rangiert Werte aus dem array.