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

2021-10-01 05:41:22 字數 990 閱讀 9542

/**

* 希爾排序:

* 每次都將元素分成一些小組,在小組內進行排序。

* 小組根據元素數量劃分。

* 小組跨度一般是元素數量的一半。

* 此後每次跨度都除以二。

* 一直到最後,小組跨度變成1。

* 這樣就變成插入排序了。

* * 希爾排序的複雜度和增量序列是相關的

* 這種序列並不是很好的增量序列,使用這個增量序列的時間複雜度(最壞情形)是o(n^2)

* hibbard提出了另乙個增量序列,這種序列的時間複雜度(最壞情形)為o(n^1.5)

* sedgewick提出了幾種增量序列,其最壞情形執行時間為o(n^1.3),其中最好的乙個序列是

** @param arr

*/public static void xiersort(int arr)

arr[j + span] = tmp; //

}span = span / 2;}}

/*** 這種方法好理解一些,外面就是跨度。裡面和簡單插入一模一樣

* @param arr

*/public static void xiersort2(int arr) else }}

span = span / 2;

}}

排序方法

平均情況

最好情況

最壞情況

輔助空間

穩定性氣泡排序n2n

n21穩定選擇排序

n2n2n21

不穩定插入排序n2n

n21穩定希爾排序

n*logn~n2

n1.3n21

不穩定堆排序

n*logn

n*lognn21

不穩定歸併排序

n*logn

n*logn

n*lognn穩定

快速排序

n*logn

n*lognn21

不穩定

排序演算法 四 希爾排序

希爾排序是插入排序的一種優化實現,比直接插入排序演算法更高效。也是第一批演算法時間複雜度突破o n 2 的演算法之一。因 d.l.shell 於 1959 年提出而得名。希爾排序是把集合資料按下標的一定增量分組,對每組使用直接插入排序演算法排序 隨著增量的減少,集合資料越來越接近整體有序。當增量減至...

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

希爾排序思想 將現有資料分為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...