希爾排序演算法

2021-08-01 02:37:10 字數 920 閱讀 2689

希爾排序演算法

定義:希爾排序是插入排序的一種,也稱縮小增量排序,是直接插入排序演算法的一種更高效的改進版本。

演算法思想:

時間複雜度:

o(n)

空間複雜度:

o(1)

效能:希爾排序為不穩定演算法(一次插入排序是穩定的,不會改變相同元素的相對順序,但是在不同的插入排序中,相同的元素可能在各自的插入排序中移動,會打亂其穩定性)

優勢:希爾排序不需要大量的輔助空間,比直接插入排序時間要快,並且**很好實現。

缺點:雖然希爾排序相對於直接插入排序要優化很多,但是o(n)的演算法依舊效率不是很高,並且希爾排序不穩定。

**實現:

[cpp]view plain

copy

#include 

#include 

#include 

using

namespace std;  

//希爾排序,從小到大排

void shellsort(int* arr, int len)    

}  }  }  

}  

[cpp]view plain

copy

#include "shellsort.h"

void testshellsort()  

;  int len = sizeof(arr) / sizeof(arr[0]);  

cout <

<

for (int i = 0; i 

cout <

shellsort(arr, len);  

cout <

<

for (int j = 0; j 

cout <

}  int main()    

排序演算法 希爾排序

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

排序演算法 希爾排序

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

排序演算法 希爾排序

希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...