演算法筆記 希爾排序

2022-08-23 19:06:16 字數 851 閱讀 5419

希爾排序是直接插入排序

的改進版,對於待排序序列的不同情況效率相近。

1. 演算法思想

先選取乙個小於n的增量d1,把序列中所有元素分成n/d1個組,所有距離為d1的倍數的元素在同一組中,在各組內執行直接插入排序。

然後選取乙個更小的增量d2,重複上述分組和排序過程;繼續減小增量,直至增量為1,即所有元素在同一組中直插排序。

因此希爾排序又叫縮小增量排序法。

2. 時間複雜度

最好情況 o(n^1.3):與增量序列的選取有關,尚未定論最好情況的複雜度是多少,目前找出最好的好像是n的1.3次方

最壞情況 o(n^2):mark allen weiss 的《data structures and algorithm analysis in c》一書中有論證

3. 空間複雜度 o(1)

就地排序,輔助空間為常數級

4. 穩定性

不穩定。存在不相鄰元素之間的交換

5. **實現(c語言)

**中使用的增量序列是不斷除2的方法,這是希爾排序最初使用的序列,效率比較低。

1

void shellsort(int *a, int

n) 2

1920 a[j] =tmp;

21}

2223 d = d / 2

; 24

} 25 }

基礎演算法筆記四 希爾排序

希爾排序是對直接插入排序的改進,非穩定的排序演算法,使得該改進後的插入排序對非有序序列進行排序時所需時間減少,但是對於基本有序序列進行排序時時間有所增加,但是對於基本有序序列進行排序對比冒泡和選擇時間還是有優勢。基本思想 確定開始的增量,一般都是序列大小除以2。之後不斷除以2,縮減增量。根據增量對序...

排序演算法 希爾排序

如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...

排序演算法 希爾排序

摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...