希爾排序是插入排序的一種,它是針對直接插入排序演算法改進而來的,
基本思想
- 把記錄按步長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));
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/260677.html
標籤:其他
