閒話很少,先看百度百科是怎麼解釋的:算法
希爾排序(Shell Sort)是插入排序的一種。也稱縮小增量排序,是直接插入排序算法的一種更高效的改進版本。希爾排序是非穩定排序算法。該方法因DL.Shell於1959年提出而得名。shell
希爾排序是把記錄按下標的必定增量分組,對每組使用直接插入排序算法排序;隨着增量逐漸減小,每組包含的關鍵詞愈來愈多,當增量減至1時,整個文件恰被分紅一組,算法便終止。性能
基本思想是:spa
先取一個小於n的整數d1做爲第一個增量,把文件的所有記錄分組。全部距離爲d1的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;而後,取第二個增量d2<d1重複上述的分組和排序,直至所取的增量 =1(
<
…<d2<d1),即全部記錄放在同一組中進行直接插入排序爲止。code
穩定性:orm
因爲屢次插入排序,咱們知道一次插入排序是穩定的,不會改變相同元素的相對順序,但在不一樣的插入排序過程當中,相同的元素可能在各自的插入排序中移動,最後其穩定性就會被打亂,因此shell排序是不穩定的。htm
僞代碼:blog
void ShellPass(SeqList R,int d)排序
public static void ShellSort(int a[]){ int d1 = a.length/2; while(true){ // 直到 d1 ==1 的時候跳出循環 for(int i =0;i<d1;i++){ for(int j =i;j+d1<a.length;j+=d1){ int temp; if(a[j]>a[j+d1]){ temp = a[j+d1]; a[j+d1] = a[j]; a[j] = temp; } } } if(d1 ==1){ break; } d1--; } }