排序演算法02-希爾排序
阿新 • • 發佈:2018-11-20
希爾排序的名稱來源於它的提出者希爾,說點題外話,希爾這傢伙運氣還是可以的,這是唯一一個以人名命名的排序演算法(僅對於常規的八大排序演算法);
希爾排序的本質是對於插入排序的改進,插入排序可以理解為增量為1的排序,因為執行N次,都使得陣列arr[0]、arr[1]、。。。arr[N-1]完成排序,可以看出增量為1;而希爾排序是採用的縮減增量排序,在希爾排序中增量的初始值為arr.length/2,然後根據增量進行分組,對分組之後的每一組資料進行插入排序,排序完畢之後令增量減半,直至增量為1,此時希爾排序完畢。
希爾排序的演算法複雜度為,是第一批打破二次屏障的排序演算法之一。
鑑於作者的文筆與表達能力有限,下面引入一張圖片,圖片來源於https://www.cnblogs.com/chengxiao/p/6104371.html
實現希爾排序的簡單程式如下:
public static int[] shellSort(int[] arr) { int j; for (int gap = arr.length / 2; gap >= 1; gap /= 2) for (int i = gap; i < arr.length; i++) { int temp = arr[i]; for (j = i; j >= gap && temp < arr[j - gap]; j -= gap) arr[j] = arr[j - gap]; arr[j] = temp; } return arr; }