Saya dapati idea umum anda betul, tetapi terdapat masalah dengan pemprosesan gelung dan saiz langkah. Sila rujuk perkara berikut untuk kaedah penulisan yang betul:
//形参增加步数gap(实际上就相当于gap替换了原来的数字1)
function directInsertionSort(array, gap) {
gap = (gap == undefined) ? 1 : gap; //默认从下标为1的元素开始遍历
var length = array.length, index, current;
for (var i = gap; i < length; i++) {
index = i - gap; //待比较元素的下标
current = array[i]; //当前元素
while(index >= 0 && array[index] > current) { //前置条件之一:待比较元素比当前元素大
array[index + gap] = array[index]; //将待比较元素后移gap位
index -= gap; //游标前移gap位
}
if(index + gap != i){ //避免同一个元素赋值给自身
array[index + gap] = current; //将当前元素插入预留空位
}
}
return array;
}
function shellSort(array){
var length = array.length, gap = length>>1, current, i, j;
while(gap > 0){
directInsertionSort(array, gap); //按指定步长进行直接插入排序
gap = gap>>1;
}
return array;
}
Mengenai penyisihan Bukit, terdapat artikel terperinci yang merangkumi penjelasan dan gif langkah demi langkah yang lengkap. Sila rujuk semua algoritma pengisihan yang mungkin digunakan dalam JS Selain itu, saya juga mempunyai artikel ini di ruangan saya, jika anda berminat, anda boleh mengikuti saya.
Saya dapati idea umum anda betul, tetapi terdapat masalah dengan pemprosesan gelung dan saiz langkah. Sila rujuk perkara berikut untuk kaedah penulisan yang betul:
Mengenai penyisihan Bukit, terdapat artikel terperinci yang merangkumi penjelasan dan gif langkah demi langkah yang lengkap. Sila rujuk semua algoritma pengisihan yang mungkin digunakan dalam JS
Selain itu, saya juga mempunyai artikel ini di ruangan saya, jika anda berminat, anda boleh mengikuti saya.