Memasukkan penyortiran efisien saat beroperasi pada data yang hampir diurutkan, yaitu, efisiensi penyortiran linier dapat dicapai.
Tetapi penyortiran penyisipan umumnya tidak efisien karena penyortiran penyisipan hanya dapat memindahkan data satu per satu per satu.
Penyortiran Hill dinamai berdasarkan desainernya Donald Shell, sebuah algoritma yang diterbitkan pada tahun 1959. Beberapa buku teks lama dan manual referensi bernama Algorithm Shell-Metzner, yang berisi nama Marlene Metzner Norton, tetapi menurut Metzner sendiri, "Saya tidak melakukan apa pun untuk algoritma ini, nama saya tidak boleh muncul dalam algoritma. Atas nama The Of
Ide dasar penyortiran bukit: Pertama -tama ambil integer d1 lebih kecil dari n sebagai kenaikan pertama, dan membagi semua catatan file menjadi grup D1. Semua catatan dengan kelipatan jarak D1 ditempatkan dalam kelompok yang sama. Pertama melakukan penyerapan penyisipan langsung di setiap grup; Catatan ditempatkan di grup yang sama dan diurutkan secara langsung.
Metode ini pada dasarnya adalah metode penyisipan pengelompokan.
Contoh 1:
Salinan kode adalah sebagai berikut:
/**
* Penyortiran bukit, juga dikenal sebagai algoritma penyortiran tambahan yang menurun, adalah versi penyortiran insert yang lebih efisien dan lebih baik. Penyortiran Hill adalah algoritma penyortiran yang tidak stabil.
*
* Penyortiran bukit mengusulkan metode yang ditingkatkan berdasarkan dua properti penyortiran insert: berikut:
*
* Masukkan penyortiran efisien saat beroperasi pada data yang hampir diurutkan, yang berarti bahwa efisiensi penyortiran linier dapat dicapai.
* Tetapi jenis penyisipan umumnya tidak efisien, karena sortir penyisipan hanya dapat memindahkan data satu per satu.
*
*/
function shellsort (list) {
var gap = math.floor (list.length / 2);
while (gap> 0) {
untuk (i = gap; i <list.length; i ++) {
temp = daftar [i];
untuk (j = i; j> = gap && list [j - gap]> temp; j - = gap) {
daftar [j] = daftar [j - gap];
}
Daftar [j] = temp;
}
celah = math.floor (celah / 2);
}
daftar pengembalian;
};
// tes
var arr = [2, 1, 3, 12, 5, 66, 23, 87, 15, 32];
Shellsort (ARR);
Contoh 2:
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
//document.write("------------------------------------------- -------------------------------------------------- ------------------------- n Kekuatan 1.3 -------- ");
//document.write("<br /> <br /> ")
// var array = array baru (12, 25, 32, 16, 18, 27, 59, 69, 36);
function shellsort (array) {
var j, i, v, h = 1, s = 3, k, n = array.length;
var result = "";
var count = 0;
sementara (h <n)
h = s*h+1;
while (h> 1) {
h = (h-1)/s;
untuk (k = 0; k <h; k ++)
untuk (i = k+h, j = i; i <n; i+= h, j = i) {
v = array [i];
Sementara (benar)
if ((j- = h)> = 0 && array [j]> v)
array [j+h] = array [j];
kalau tidak
merusak;
array [j+h] = v;
}
Count ++;
Hasil + = "<br /> thread" + count + "Hasil pemesanan melalui pass adalah:";
untuk (var n = 0; n <array.length; n ++) {
hasil + = array [n] + ",";
}
}
hasil pengembalian;
}
// shallsort (array);
//document.write("<br /> <br /> ");
</script>