排序演算法 四 希爾排序

2021-10-19 06:04:43 字數 697 閱讀 7126

希爾排序是插入排序的一種優化實現,比直接插入排序演算法更高效。也是第一批演算法時間複雜度突破o(n^2)的演算法之一。因 d.l.shell 於 1959 年提出而得名。

希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序;隨著增量的減少,集合資料越來越接近整體有序。當增量減至 1 時,整個集合資料被分成一組,進行一遍插入排序,集合整體有序,演算法終止。

希爾排序時間複雜度o(n^3/2),時間複雜度的下界是n*log2n。效能比直接插入排序更好。根據希爾排序原理,每經過一次分組,集合資料都會更接近有序,直到最後整個資料集合為乙個分組, 經過直接插入排序後,集合將會有序。**實現如下:

/*

*@功能說明

* 希爾排序

*@引數 int * array <#待排序陣列#>

*@引數 int len <#待排序陣列長度#>

*@返回值 <#void#>

*/void shellsort(int * array, int len)}}

}

希爾排序是目前總結的排序演算法(氣泡排序,簡單選擇排序,直接插入排序,希爾排序)中,第乙個演算法時間複雜度突破o(n^2)的演算法。希爾排序在最壞的情況下和平均情況下執行效率相差不多。幾乎任何需要排序的場景,開始時都可以用希爾排序,如果實際使用中排序演算法的效能還需要提高,則考慮其它效能更高的排序演算法,如快速排序(後面會總結)。

排序演算法(四) 希爾排序 增量排序

希爾排序思想 將現有資料分為d個組,在每個分組內使用直接插入排序演算法,使得整個資料段越來越有序。接著繼續將資料分組並使用直接插入排序 分組會越來越小 直到分組為1。每個分組數一般互質 時間複雜度 o n 1.3 1.5 空間複雜度 o 1 穩定性 不穩定 void shell int arr,in...

排序演算法總結(四)希爾排序

希爾排序又稱縮小增量排序,是插入排序的一種。它的基本思想是先將整個待排記錄序列分割成若干個子串行,然後對這若干個子串行分別進行直接插入排序,等到待排序列基本有序時,再對整個序列進行直接插入排序。比如如下陣列,先已step 5進行分割。49,38,65,97,76,13,27,49,55,4 由於st...

整理排序演算法(四) 希爾排序

希爾排序 每次都將元素分成一些小組,在小組內進行排序。小組根據元素數量劃分。小組跨度一般是元素數量的一半。此後每次跨度都除以二。一直到最後,小組跨度變成1。這樣就變成插入排序了。希爾排序的複雜度和增量序列是相關的 這種序列並不是很好的增量序列,使用這個增量序列的時間複雜度 最壞情形 是o n 2 h...