希爾排序也成爲“縮小增量排序”,其基本原理是,現將待排序的數組元素分成多個子序列,使得每個子序列的元素個數相對較少,然後對各個子序列分別進行直接插入排序,待整個待排序列“基本有序”後,最後在對所有元素進行一次直接插入排序。因此,我們要採用跳躍分割的策略:將相距某個“增量”的記錄組成一個子序列,這樣才能保證在子序列內分別進行直接插入排序後得到的結果是基本有序而不是局部有序。希爾排序是對直接插入排序算法的優化和升級。 所謂的基本有序,就是小的關鍵字基本在前面,大的基本在後面,不大不小的基本在中間,例如{2,1,3,6,4,7,5,8,9,}就可以稱爲基本有序了。但像{1,5,9,3,7,8,2,4,6}這樣,9在第三位,2在倒數第三位就談不上基本有序。 public static void shellSort(int[] arr, int left, int right) { for (int d = (left + right) / 2; d >= 1; d /= 2){ for (int i = d; i < arr.length; i += d){ #注意此處i以間隔d爲基準進行變化 System.out.print(i + " "); int temp = arr[i]; int j; for (j = i - d; j >= 0 && arr[j] > temp; j -= d){ arr[j + d] = arr[j]; } arr[j + d] = temp; } } }
java數據結構之希爾排序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.