Nehmen Sie zuerst eine Ganzzahl D1, die kleiner als N als erstes Inkrement ist, und teilen Sie alle Datensätze in der Datei in Gruppen von D1 auf. Alle Datensätze mit mehreren Abstandsdistolen sind in derselben Gruppe platziert. Nehmen Sie zuerst die Sortierung in jeder Gruppe ein. Alle Datensätze werden in derselben Gruppe platziert und direkt sortiert.
Diese Methode ist im Wesentlichen eine Gruppierungs -Insertionsmethode.
Schema:
Quellcode
Die Codekopie lautet wie folgt:
Paket com.zc.manythread;
/**
*
* @Author Ich bin
*
*/
öffentliche Klasse Shellsort {
public static int count = 0;
public static void Shellsort (int [] Daten) {
// Berechnen Sie den maximalen H -Wert
int H = 1;
while (h <= data.length / 3) {
H = H * 3 + 1;
}
while (h> 0) {
für (int i = h; i <data.length; i += h) {
if (Daten [i] <Daten [i - h]) {
int tmp = data [i];
int j = i - h;
while (j> = 0 && data [j]> tmp) {
Daten [j + h] = Daten [j];
J -= H;
}
Daten [j + h] = tmp;
Druck (Daten);
}
}
// Berechnen Sie den nächsten H -Wert
H = (h - 1) / 3;
}
}
public static void print (int [] data) {
für (int i = 0; i <data.length; i ++) {
System.out.print (Daten [i] + "/t");
}
System.out.println ();
}
public static void main (String [] args) {
int [] data = new int [] {4, 3, 6, 2, 1, 9, 5, 8, 7};
Druck (Daten);
ShellSort (Daten);
Druck (Daten);
}
}
Auslaufergebnisse:
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.