Pertama -tama ambil bilangan bulat D1 lebih kecil dari n sebagai kenaikan pertama, dan membagi semua catatan dalam file menjadi grup D1. Semua catatan dengan kelipatan jarak DL ditempatkan dalam kelompok yang sama. Pertama, langsung masukkan penyortiran di setiap grup; Semua catatan ditempatkan di grup yang sama dan diurutkan secara langsung.
Metode ini pada dasarnya adalah metode penyisipan pengelompokan.
Skema:
Kode Sumber
Salinan kode adalah sebagai berikut:
paket com.zc.manythread;
/**
*
* @Author saya
*
*/
Shellsort kelas publik {
Public Static Int Count = 0;
public static void shellsort (int [] data) {
// Hitung nilai H maksimum
int h = 1;
while (h <= data.length / 3) {
h = h * 3 + 1;
}
while (h> 0) {
untuk (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) {
data [j + h] = data [j];
j -= h;
}
data [j + h] = tmp;
cetak (data);
}
}
// Hitung nilai h berikutnya
h = (h - 1) / 3;
}
}
public static void print (int [] data) {
untuk (int i = 0; i <data.length; i ++) {
System.out.print (data [i] + "/t");
}
System.out.println ();
}
public static void main (string [] args) {
int [] data = int baru [] {4, 3, 6, 2, 1, 9, 5, 8, 7};
cetak (data);
shellsort (data);
cetak (data);
}
}
Hasil Menjalankan:
Penyortiran shell tidak stabil, overhead ruangnya juga O (1), dan overhead waktu diperkirakan antara O (N3/2) dan O (N7/6).