排序演算法之希爾排序

2021-07-03 21:42:18 字數 729 閱讀 9650

設待排元素序列有

n 個,首先取乙個整數ga

p(ga

p作為間隔,將全部元素分為ga

p 個子序列,所有距離為ga

p 的元素放在同乙個子串行中,在每乙個子串行中分別進行直接插入排序。然後縮小間隔ga

p ,重複上述的子串行劃分和排序工作。知道最後ga

p 等於1時,將所有元素放在同乙個序列中排序為止。 至於g

ap的取法有各種方案。最初shell提出取ga

p=⌊n

/2⌋ ,ga

p=⌊g

ap/2

⌋ ,直到ga

p=1 。但由於直到最後一步,在奇數字置的元素才會與偶數字置的元素進行比較,其效率將很低。後來kn

uth 提出取ga

p=⌊g

ap/3

⌋+1 。還有人提出都取奇數為好,也有人提出各ga

p 互質為好。應用不同的序列會使希爾排序演算法的效能有很大的差異。

//待排資料儲存在陣列a中,以及待排序列的左右邊界

public

void

shellsort(int a, int left, int right) while (j >= left && temp < a[j]);

a[j + gap] = temp;

}}

} while (gap > 1);

}

排序演算法之希爾排序

希爾排序實際上是一種分治思想的插入排序。插入排序不說了,不清楚看這裡 分治思想,對增量為dk,dk遞減,開始很多小序列,最後為乙個大序列 相對直接插入排序,在希爾排序中,只不過增量不是1,而是dk 較好的增量序列是2 k 1,2 k 1 1,7,3,1,這樣可使shell排序時間複雜度達到o n 1...

排序演算法之希爾排序

希爾排序 shell sort 又稱為縮小增量排序,輸入插入排序演算法,是對直接排序演算法的一種改進。本文介紹希爾排序演算法。對於插入排序演算法來說,如果原來的資料就是有序的,那麼資料就不需要移動,而插入排序演算法的效率主要消耗在資料的移動中。因此可知 如果資料的本身就是有序的或者本身基本有序,那麼...

排序演算法之希爾排序

希爾排序,突破了 通過交換相鄰元素進行排序的任何演算法平均需要 n 2 的二次時間限制 通過比較相距一定間隔的元素來工作。使用乙個增量序列 h1 1,h2,ht,在使用乙個 增量h的一趟排序後,對於每乙個i滿足pdata i pdata i h 即此時序列是h排序的 各趟 比較所用的距離逐漸減小,直...