public static void main(String[] args) {
int[] arr = {9, 6, 8, 4, 2, 5, 7, 3, 1};
int[] arr2 = {9, 6, 8, 4, 2, 5, 7, 3, 1};
shellSort(arr);
System.out.println("=====================");
shellSort2(arr2);
}
/**
* shell排序,插入排序的最佳化
* 最終也是使用插入排序,區別就是找到間隔數,可以理解插入排序就是間隔為1的shell排序
* 其實可以這樣理解,把gap換成1,代入就行了,只有gap是需要變換的,其他程式碼就是插入排序的程式碼
* 複雜度O(n^1.3)
* @param arr
*/
private static void shellSort(int[] arr) {
for (int gap = arr.length / 2; gap > 0; gap /= 2){
for (int i = gap; i < arr.length; i++) {
int min = arr[i];
int j = i - gap;
while (j >= 0 && min < arr[j]) {
arr[j + gap] = arr[j];
j -= gap; //每次j就是減去gap個間隔數,其實gap是1的話就是j--
}
if (arr[j + gap] != min) { //如果相等,可不用替換,這樣就可以減少替換的次數
arr[j + gap] = min;
System.out.println(Arrays.toString(arr));
}
}
}
}
/**
* shell排序,for迴圈的形式
* @param arr
*/
private static void shellSort2(int[] arr) {
//表示每次的間隔是原來的一半,這樣最終的間隔一定會有1的間隔
int temp = 0;
for (int gap = arr.length / 2; gap > 0 ; gap /= 2) {
for (int i = gap; i < arr.length; i++) {
for (int j = i; j > gap - 1 ; j -= gap) {
if (arr[j] < arr[j - gap]) {
temp = arr[j];
arr[j] = arr[j - gap];
arr[j - gap] = temp;
System.out.println(Arrays.toString(arr));
}
}
}
}
}
希爾排序(Shell Sort)
相關文章
- 希爾排序排序
- 理解希爾排序排序
- Java希爾排序Java排序
- 希爾排序(一)排序
- 希爾排序(二)排序
- C++希爾排序C++排序
- 希爾排序(C++)排序C++
- 排序演算法__希爾排序排序演算法
- 【排序演算法】- 希爾排序排序演算法
- 希爾排序——重溫排序(二)排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- PHP 排序演算法之希爾排序PHP排序演算法
- 排序演算法:Java實現希爾排序排序演算法Java
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- JavaScript希爾排序簡單介紹JavaScript排序
- rust-algorithms:14-希爾排序RustGo排序
- 第二章 :查詢與排序-------希爾排序排序
- 【演算法】希爾排序的實現演算法排序
- python實現希爾排序演算法Python排序演算法
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 七、排序,選擇、冒泡、希爾、歸併、快速排序實現排序
- 【PHP資料結構】插入類排序:簡單插入、希爾排序PHP資料結構排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- 程式猿修仙之路--演算法之希爾排序演算法排序
- 【譯】Swift演算法俱樂部-希爾排序Swift演算法排序
- 基礎演算法系列 之希爾排序演算法排序
- sort排序排序
- python演算法與資料結構-希爾排序(35)Python演算法資料結構排序
- 【小小前端】前端排序演算法第二期(繞人的希爾排序)前端排序演算法
- 淺解前端必須掌握的演算法(四):希爾排序前端演算法排序
- 資料結構上機——希爾排序(含監視哨版本)資料結構排序
- 堆排序 Heap Sort排序
- Elasticsearch script sort 排序Elasticsearch排序
- 快速排序 (Quick Sort)排序UI
- Collections sort()排序方法排序
- 計數排序 - Counting Sort排序
- 插入排序(Insertion Sort)排序
- 五分鐘學會一個高難度演算法:希爾排序演算法排序