java希爾排序(直接插入排序的優化)

2021-09-23 20:21:14 字數 576 閱讀 8670

希爾排序(縮小增量排序):

將待排序序列分為 n 個組,從第乙個元素開始,每兩個距離為 n 的數字為一組,每組兩個元素,比較大小,前面大於後面則交換位置;所有待排序列排完後,進入下一趟排序。

將上一次排的序列再次進行分組,組數變為原來的一半也就是 n/2 ,(如果第一次分了5組,那第二次就分2組);

再次進行1,2步操作,直至組數為1,待排序序列全部有序;

//gap=分組數,一趟希爾排序:

public static void shell(int array, int gap) else

}array[j + gap] = temp;

}} //進行 n 趟排序,得到最終有序序列:

public static void shellsort(int array);

for (int i=0;i希爾排序特點:

1.直接插入排序的優化

2.每一趟排序都是為了讓陣列更為有序,最後一趟排完即為有序序列。

時間複雜度:o(nlog n)~ o(n^2)

空間複雜度:o(1)

穩定性:不穩定

直接插入排序 希爾排序

一.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。最優複雜度 當輸入陣列就是排好序的時候,複雜度為o n 而快速排序在這種情況下會產生o n 2 的複雜度。最差複雜度 當輸入陣列為倒序時,複雜度...

直接插入排序 希爾排序

1.直接插入排序 時間複雜度o n2 工作原理 通過構建有序序列,對於未排序資料,在已排序的序列中,從後向前掃瞄,找到相應的位置並插入。插入排序在實現上,在從後向前掃瞄的過程中,需要反覆把已排序元素逐步向後移動,為最新元素提供插入空間。直接插入排序 public static void insert...

插入排序 直接插入 希爾排序

直接插入排序是將元素按順序插入已經排好序的序列中。對於待插入的元素,如果比最後乙個元素還大,則不用處理。否則,從後邊元素開始比較,並順次後移,直到碰到元素小於或者等於該元素。設定第乙個元素位置為哨兵,用來存放待插入元素。include include include using namespace ...