排序演算法之希爾排序【java實現】
阿新 • • 發佈:2018-11-20
前面介紹的冒泡、選擇、插入排序演算法雖然簡單直觀,但是在排序上的效率一般。對於大量的資料排序就需要更加高效的演算法,那麼下面來介紹一下高效的排序演算法----希爾排序,又稱Shell排序,縮小增量排序。
實際上,希爾排序是基於插入排序的思想。
實現步驟:
(1)將有n個元素的陣列分成n/2的數字序列,第一個資料和第n/2+1個數據為一對。
(2)一次迴圈使每一個序列對排好序。
(3)然乎,在變為n/4個序列,再次排序。
(4)不斷重複上述過程,隨著序列減少最後變為一個,也就完成了整個序列。
package zhgyu.sort; public class ShellSort { static final int SIZE = 10; static void shellSort(int[] arr) { int temp,r; int i,j,k; int x = 0; for(r = arr.length/2; r >= 1; r /= 2) { for(i = r; i < arr.length; i++) { temp = arr[i]; j = i - r; while(j >= 0 && arr[j] > temp) { arr[j+r] = arr[j]; j -= r; } arr[j+r] = temp; } x++; System.out.print("第"+ x +"次的排序結果:"); for(k = 0; k < arr.length; k++) { System.out.print(arr[k] + "\t"); } System.out.println(); } } public static void main(String[] args) { int[] arr = new int[SIZE]; int i; for(i = 0; i < SIZE; i ++) { arr[i] = (int)(Math.random()*(100 + 1)); } //排序前的陣列 System.out.print("排序前的陣列:" + "\t"); for(i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); //呼叫插入排序演算法 shellSort(arr); //排序後的陣列 System.out.print("排序前的陣列:" + "\t"); for(i = 0; i < arr.length; i++) { System.out.print(arr[i] + "\t"); } System.out.println(); } }