插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率。
但插入排序一般來說是低效的, 因為插入排序每次只能將資料移動一位。
希爾排序按其設計者希爾(Donald Shell)的名字命名,該演算法由1959年公佈。一些舊版教科書和參考手冊把該演算法命名為Shell-Metzner,即包含Marlene Metzner Norton的名字,但是根據Metzner本人的說法,「我沒有為這種演算法做任何事,我的名字不應該出現在演算法的名字中。
希爾排序基本思想:先取一個小於n的整數d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為d1的倍數的記錄放在同一個組別中。先在各組內進行直接插入排序;然後,取第二個增量d2
此方法實質上是一種分組插入法。
實例1:
/**
* 希爾排序,也稱遞減增量排序演算法,是插入排序的一種更有效率的改進版本。希爾排序是非穩定排序演算法。
*
* 希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
*
* 插入排序在對幾乎已經排好序的資料操作時, 效率高, 即可以達到線性排序的效率
* 但插入排序一般來說是低效率的, 因為插入排序每次只能將資料移動一位
*
/** */
function shellSort( list ) {
var gap = Math.floor( list.length / 2 );
for( i = gap; i temp = list[i];
; j -= gap ) {
list[j] = list[j - gap];
temp;
}
gap = Math. floor( gap / 2 );
}
return list;
};
// test
var arr = [🎜>
// test
var arr = [2, 15353, , 66, 23, 87, 15, 32];
shellSort(arr);
實例2: