Primeiro, pegue um número inteiro D1 menor que N como o primeiro incremento e divida todos os registros no arquivo em grupos de D1. Todos os registros com múltiplos de DLUST DL são colocados no mesmo grupo. Primeiro, insira diretamente a classificação em cada grupo; Todos os registros são colocados no mesmo grupo e classificados diretamente.
Este método é essencialmente um método de inserção de agrupamento.
Esquema:
código -fonte
A cópia do código é a seguinte:
pacote com.zc.manythread;
/**
*
* @Author eu sou
*
*/
classe pública Shellsort {
public static int count = 0;
public static void Shellsort (int [] dados) {
// Calcule o valor máximo de H
int h = 1;
while (h <= data.length / 3) {
h = h * 3 + 1;
}
while (h> 0) {
for (int i = h; i <data.length; i += h) {
if (dados [i] <data [i - h]) {
int tmp = dados [i];
int j = i - h;
while (j> = 0 && data [j]> tmp) {
dados [j + h] = dados [j];
j -= h;
}
dados [j + h] = tmp;
impressão (dados);
}
}
// Calcule o próximo valor H
h = (h - 1) / 3;
}
}
public static void Print (int [] dados) {
for (int i = 0; i <data.length; i ++) {
System.out.print (dados [i] + "/t");
}
System.out.println ();
}
public static void main (string [] args) {
int [] data = new int [] {4, 3, 6, 2, 1, 9, 5, 8, 7};
impressão (dados);
Shellsort (dados);
impressão (dados);
}
}
Resultados em execução:
A classificação da concha é instável, a sobrecarga do espaço também é O (1) e a sobrecarga do tempo é estimada entre O (N3/2) e O (N7/6).