Java希爾排序
希爾排序圖示
- 希爾排序提高直接插入排序的效率,在直接插入排序的基礎上使用增量進行分組,增量為 gap,每次分組會減小增量,直至增量減小為 1 ,所以又稱縮小增量排序。
- 從
array[gap]
開始依次往後遍歷獲取待插入值insertValue
- 從
gap
處開始向前遍歷獲取待插入位置insertIndex
,每次向前移動gap
個位置- 當
insertValue < array[insertIndex - gap]
時,將insertIndex
向前移動gap
個位置繼續比較 - 當
insertValue >= array[insertIndex - gap]
時,說明找到插入位置,將insertValue
插入到array[insertIndex]
處即可
- 當
參考程式碼
public static void shellSort(int[] arr) {
// gap 為間隔分組,gap 每一輪遞減 2 倍
for (int gap = arr.length / 2; gap > 0; gap /= 2) {
// 從第 gap 個元素開始向後遍歷獲取待插入值
for (int i = gap; i < arr.length; i++) {
int insertValue = arr[i]; // 初始化待插入值
int insertIndex = i; // 初始化待插入位置
// 在不越界的前提下,尋找待插入位置
while (insertIndex - gap >= 0 && insertValue < arr[insertIndex - gap]) {
arr[insertIndex] = arr[insertIndex - gap]; // 將前 gap 個位置的值後移 gap
insertIndex -= gap; // 將 insertIndex 前移 gap 個位置
}
arr[insertIndex] = insertValue;
}
}
}
排序效果測試
public static void main(String[] args) {
//int[] arr = {2, 6, 9, 5, 4, 7, 8, 3, 1};
System.out.println("排序前:" + Arrays.toString(arr));
shellSort(arr);
System.out.println("希爾排序:" + Arrays.toString(arr));
}
100萬隨機資料測試排序時間
public static void main(String[] args) {
int[] arrTime = new int[1000000];
for (int i = 0; i < 1000000; i++) {
arrTime[i] = (int) (Math.random() * 1000000);
}
long former = System.currentTimeMillis();
shellSort(arrTime);
long later = System.currentTimeMillis();
System.out.println("時間:" + (later - former) + " 毫秒");
}
相關文章
- 希爾排序排序
- 排序演算法:Java實現希爾排序排序演算法Java
- 理解希爾排序排序
- 希爾排序(一)排序
- 希爾排序(二)排序
- 希爾排序(Shell Sort)排序
- C++希爾排序C++排序
- 希爾排序(C++)排序C++
- 排序演算法__希爾排序排序演算法
- 【排序演算法】- 希爾排序排序演算法
- 希爾排序——重溫排序(二)排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- PHP 排序演算法之希爾排序PHP排序演算法
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- JavaScript希爾排序簡單介紹JavaScript排序
- rust-algorithms:14-希爾排序RustGo排序
- 第二章 :查詢與排序-------希爾排序排序
- 【演算法】希爾排序的實現演算法排序
- python實現希爾排序演算法Python排序演算法
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 【PHP資料結構】插入類排序:簡單插入、希爾排序PHP資料結構排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- 程式猿修仙之路--演算法之希爾排序演算法排序
- 【譯】Swift演算法俱樂部-希爾排序Swift演算法排序
- 基礎演算法系列 之希爾排序演算法排序
- python演算法與資料結構-希爾排序(35)Python演算法資料結構排序
- 【小小前端】前端排序演算法第二期(繞人的希爾排序)前端排序演算法
- 淺解前端必須掌握的演算法(四):希爾排序前端演算法排序
- 資料結構上機——希爾排序(含監視哨版本)資料結構排序
- 好程式設計師Java學習路線帶你5分鐘瞭解希爾排序程式設計師Java排序
- 五分鐘學會一個高難度演算法:希爾排序演算法排序
- Python八大演算法的實現,插入排序、希爾排序、氣泡排序、快速排序、直接選擇排序、堆排序、歸併排序、基數排序。Python演算法排序
- (建議收藏)2020最新排序演算法總結:冒泡、選擇、插入、希爾、快速、歸併、堆排序、基數排序排序演算法
- 【資料結構與演算法】高階排序(希爾排序、歸併排序、快速排序)完整思路,並用程式碼封裝排序函式資料結構演算法排序封裝函式
- 【演算法】排序04——程式碼簡約而不簡單的希爾排序(含程式碼實現)演算法排序
- SpringCloud大型企業分散式微服務雲架構原始碼之【資料結構】-排序-希爾排序SpringGCCloud分散式微服務架構原始碼資料結構排序
- 希爾密碼(hill密碼)密碼