Das Einfügen von Sortierungen ist effizient, wenn sie in fast sortierten Daten arbeiten, dh die Effizienz der linearen Sortierung kann erreicht werden.
Die Sortierung der Einfügen ist jedoch im Allgemeinen ineffizient, da die Insertionssortierung nur nacheinander Daten verschieben kann.
Hill Sorting ist nach seinem Designer Donald Shell benannt, einem 1959 veröffentlichten Algorithmus. Einige alte Lehrbücher und Referenzhandbücher namens Algorithmus Shell-Metzner, die den Namen Marlene Metzner Norton enthält, aber laut Metzner selbst: "Ich habe nichts für diesen Algorithmus getan, mein Name sollte nicht im Algorithmus erscheinen. Im Namen von
Die Grundidee der Hügelsortierung: Nehmen Sie zunächst eine Ganzzahl D1, die kleiner als N als erstes Inkrement ist, und teilen Sie alle Datensätze der Datei in Gruppen von D1 auf. Alle Datensätze mit vielfältigem Abstand D1 werden in derselben Gruppe platziert. Führen Sie zuerst die direkte Einfügungssortierung in jeder Gruppe durch. Datensätze werden in derselben Gruppe platziert und direkt sortiert.
Diese Methode ist im Wesentlichen eine Gruppierungs -Insertionsmethode.
Beispiel 1:
Die Codekopie lautet wie folgt:
/**
* Hillsortierung, auch als abnehmender inkrementeller Sortieralgorithmus bezeichnet, ist eine effizientere und verbesserte Version der Sortierung. Die Sortierung von Hills ist ein nicht stabiler Sortieralgorithmus.
*
* Die Hill -Sortierung schlägt eine verbesserte Methode vor, die auf den folgenden zwei Eigenschaften der Sortierung basiert:
*
* Die Sortierung des Einfügens ist effizient, wenn Sie in fast sortierten Daten arbeiten, was bedeutet, dass die Effizienz der linearen Sortierung erreicht werden kann.
* Aber die Einfügungssortierung ist im Allgemeinen ineffizient, da die Insertionssorte nur Daten nacheinander verschieben kann.
*
*/
Funktion ShellSort (Liste) {
var gap = math.floor (list.length / 2);
while (gap> 0) {
für (i = gap; i <list.length; i ++) {
temp = list [i];
für (j = i; j> = gap && list [j - gap]> temp; j - = gap) {
Liste [j] = list [j - gap];
}
Liste [j] = temp;
}
gap = math.floor (gap / 2);
}
Rückgabeliste;
};
// prüfen
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
ShellSort (arr);
Beispiel 2:
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
//document.write("-------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------- n zur Kraft von 1,3 -------- ");
//document.write("<br /> <br /> "))
// var array = new Array (12, 25, 32, 16, 18, 27, 59, 69, 36);
Funktion ShellSort (Array) {
var j, i, v, h = 1, s = 3, k, n = array.length;
var result = "";
var count = 0;
während (h <n)
H = S*H+1;
while (h> 1) {
H = (H-1)/S;
für (k = 0; k <h; k ++)
für (i = k+h, j = i; i <n; i+= h, j = i) {
v = Array [i];
Während (wahr)
if ((j- = h)> = 0 && array [j]> v)
Array [J+H] = Array [j];
anders
brechen;
Array [j+h] = v;
}
zählen ++;
Ergebnis + = "<br /> Thread" + count + "Das Ergebnis der Bestellung durch den Pass ist:";
für (var n = 0; n <array.length; n ++) {
Ergebnis + = Array [n] + ",";
}
}
Rückgabeergebnis;
}
// Shalsort (Array);
//document.write("<br /> <br /> ");
</script>