Gewusst wie: Sortieren eine Liste von Ganzzahlen

November 10

Gewusst wie: Sortieren eine Liste von Ganzzahlen

Sortieren einer Liste ist eine wichtige Software-Operation. Beim Suchen etwas in einer unsortierten Liste bedeutet im Durchschnitt gehen auf halbem Wege durch die Liste. Suche nach etwas in einer sortierten Liste nimmt, allenfalls den Logarithmus zur Basis zwei von der Länge der Liste. Beispielsweise könnten Sie voraussichtlich 500.000 Dinge zu finden, was Sie wollen in einer unsortierten Liste 1 Million Dinge betrachten. Wenn sie sortiert waren konnte Sie voraussichtlich rund 20 Dinge betrachten.

Die Reihenfolge des Geschlechtes

Die Effizienz der Algorithmen--einschließlich Sortieralgorithmen--sind oft ausgedrückt in "Landau." Dies ist geschrieben, O(N^2) und ausgeprägten "Order N kariert." Die Notation wird beschrieben, was passiert, wenn die "Größe" des Problems wächst. Wenn es O(N^2) ist, wächst dann die Zeit, als das Quadrat der Größe--die Anzahl der Dinge sortiert werden. Wenn es drei Sekunden, die 1 Million Einträge sortieren dauert, dauert es 12 Sekunden 2 Millionen Elemente sortieren. Die Größe verdoppelt, und die Zeit nimmt, 2 ^ 2 = 4 mal so lange.

Eine einfache Art

Eine sehr einfache, leicht zu Programm sortieren würde erfordern eine andere leere Liste die gleiche Größe wie die Liste von Ganzzahlen, die Sie sortieren möchten. Fahren Sie durch das Array von Ganzzahlen einmal sucht die kleinste ganze Zahl. Wenn Sie es gefunden haben, markieren Sie ihn als "getroffen" und legen Sie es in die leere Liste Anfang. Tun Sie dies auch hier finden die kleinsten Robbenjungen Ganzzahl und Darstellungsweisen im nächsten verfügbaren Slot in der sortierten Liste. Wiederholen Sie dieser letzten Schritt alles markiert ist, als genommen. Diese Sortier-Algorithmus ist O(N^2) und eignet sich nur für kleine Listen. So ist es "nicht gut skaliert wird" untragbar langsam bei großen Listen.

Der Ripple-Art

Die welligkeit sortieren oder Blase Sortieren ist für die Art und Weise benannt, die die Elemente in derselben Liste zu bleiben, während die sortiert wird. Es ist ein großer Favorit mit Programmierern, denn es Platz spart und extrem einfach ist zu schreiben und zu debuggen. Im schlimmsten Fall ist es O(N^2), aber es ist im besten Fall o (n). Im durchschnittlichen Fall ist es O(NlogN), das ist ungefähr so gut wie's geht. Durchlaufen der Liste Paaren ganzer Zahlen zu betrachten, und wechseln sie, wenn sie kaputt sind. Halten Sie tun dies, bis die Liste sortiert wird.

Komplexere Sorten

Es gibt eine Vielzahl von möglichen--wie Merge Sort und quick Sort--, die O(NlogN) rechtzeitig zu arbeiten, aber sie sind schwierig zu schreiben und oft schlimmer als Blase Sortierung für kurze Listen durchführen. Diese Algorithmen sollte nur betrachtet werden, wenn häufig enorme Listen sortiert werden. Wenn Sie Einzelheiten über die Daten verwenden können, um mit der Art zu helfen, manchmal ist es möglich, die Bestellung auf o (n) zu bekommen, aber das ist die absolute theoretische Grenze. Im allgemeinen menschlichen Zeit ist wertvoller als Maschinenzeit und es empfiehlt sich, den Code so einfach wie möglich zu halten.