Primero tome un entero D1 más pequeño que n como el primer incremento, y divida todos los registros en el archivo en grupos de D1. Todos los registros con múltiplos de distancia DL se colocan en el mismo grupo. Primero, inserte directamente la clasificación en cada grupo; Todos los registros se colocan en el mismo grupo y se ordenan directamente.
Este método es esencialmente un método de inserción de agrupación.
Esquemático:
código fuente
La copia del código es la siguiente:
paquete com.zc.ManyThread;
/**
*
* @author soy
*
*/
clase pública Shellsort {
Public static int count = 0;
Public static void shellsort (int [] datos) {
// Calcule el valor H máximo
int h = 1;
while (h <= data.length / 3) {
H = H * 3 + 1;
}
while (h> 0) {
para (int i = h; i <data.length; i += h) {
if (data [i] <data [i - h]) {
int tmp = data [i];
int j = i - h;
while (j> = 0 && data [j]> tmp) {
datos [j + h] = data [j];
j -= h;
}
datos [j + h] = tmp;
imprimir (datos);
}
}
// Calcule el siguiente valor H
H = (H - 1) / 3;
}
}
Public static void print (int [] data) {
para (int i = 0; i <data.length; i ++) {
System.out.print (datos [i] + "/t");
}
System.out.println ();
}
public static void main (string [] args) {
int [] data = new int [] {4, 3, 6, 2, 1, 9, 5, 8, 7};
imprimir (datos);
shellsort (datos);
imprimir (datos);
}
}
Resultados de ejecución:
La clasificación de concha es inestable, su sobrecarga de espacio también es O (1), y se estima que la sobrecarga de tiempo se encuentra entre O (N3/2) y O (N7/6).