希爾排序--O(N^2) --- 不穩定
阿新 • • 發佈:2021-02-17
技術標籤:java資料結構演算法排序演算法java資料結構插入排序
希爾排序是插入排序的一種,它是針對直接插入排序演算法改進而來的。
基本思想
- 把記錄按步長gap分組,對每組記錄採用直接插入排序方法進行排序;
- 隨著步長逐漸減小,所分成的組包含的記錄越來越多;
當步長值減小到1時,整個資料合成一組,構成一組有序記錄,完成排序;
動態圖
程式碼
public class ShellSort {
public static void main(String[] args) {
int[] array = {3,5,1,2,4,6,8,10,9};
sort(array);
}
public static void sort(int[] array){
//1.定義一個用於進行交換的中間變數
int temp = 0;
//2.定義一個用於記錄是希爾排序的第幾輪排序
int count = 0;
//3.開始進行希爾排序 ,初始步長為陣列長度的一半,每一次步長減半
for(int gap = array.length / 2;gap > 0;gap /= 2) {
//
for(int i = gap;i < array.length;i++) {
//遍歷各組中的所有元素(共 gap組),步長gap
for(int j = i - gap;j >= 0; j-=gap) {
//如果當前元素大於 加上步長之後的那個元素,則進行交換
if(array[j] > array[j+gap]) {
temp = array[j];
array[j] = array[j+gap];
array[j+gap] = temp;
}
}
}
System.out.println("希爾排序的第"+(++count)+"輪排序的結果是:"+Arrays.toString(array));
}
}
}