Einführung
Die Hügelsortierung (Reduzierung der inkrementellen Methode) gehört zur Sortierung der Insertionsklassen. Es wird von Shell vorgeschlagen. Die Sortierung von Hills hat sich für die direkte Sortierung direkter Insertion einfache Verbesserungen vorgenommen: Es erhöht das Intervall zwischen den Elementen bei der Insertionssortierung und den Einfügen in diese Intervallelemente, wodurch sich die Datenelemente über eine große Spanne hinweg bewegen. Nachdem diese Datenelemente einmal sortiert sind, reduziert der Hügelsortieralgorithmus das Intervall der Datenelemente und sortiert ihn dann und fährt nacheinander fort. Das Intervall zwischen den Datenelementen, wenn diese Sortierung als Inkremente bezeichnet wird, und der Buchstabe H wird verwendet, um dieses Inkrement darzustellen.
Die häufig verwendete H -Sequenz wird von Knuth vorgeschlagen. Diese Sequenz beginnt von 1 und wird durch die folgende Formel erzeugt:
H = 3 * H +1
Das Programm muss wiederum die H -Sequenz umgekehrt berechnen und sollte verwendet werden
H = (H-1)/3
Code -Implementierung
Implementierungscode 1:
public static void Shellsort (int [] arr) {int temp; für (int delta = arr.length/2; arr [j-delta] = arr [j]; arr [j] = temp; }} // Loop i} // Loop Delta}Implementierungscode 2:
public static void Shellsort2 (int [] arr) {int delta = 1; while (Delta <arr.length/3) {// Delta Delta = Delta*3+1 erzeugen; // <o (n^(3/2)) von Knuth, 1973>: 1, 4, 13, 40, 121, ...} int temp; für (; Delta> = 1; arr [j-delta] = arr [j]; arr [j] = temp; }} // Loop i} // Loop Delta} Wenn das obige Programm es mit der direkten Einfügungsmethode vergleicht, werden Sie feststellen, dass der Unterschied zwischen ihm und der direkten Insertions -Sortierung darin besteht, dass die H in der direkten Einfügungssortierung durch 1 ersetzt wird.
Die Shell -Sortierung ist instabil, sein Raumaufwand beträgt auch O (1), und der Zeitaufwand wird auf O (N3/2) und O (N7/6) geschätzt.