1. 程式人生 > >C語言實現排序演算法---希爾排序

C語言實現排序演算法---希爾排序

今天又重新研究了一遍諸多排序演算法,現在簡單分享一下里面的希爾排序(Shell Sort)的心得

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

希爾排序是穩定排序演算法。該方法因DL.Shell於1959年提出而得名。

使用該演算法,應首先為待排序元素序列選擇一個不大於元素個數的增量,或者也稱步長(step)。其本質是給元素序列分組。

現在我們有如下一組資料:

96,107, 145, 137, 106, 142, 146, 134, 32, 86

一般我們會選擇元素個數的一半作為步長(這裡元素個

數為10,所以步長取5)。其本質是給這個序列分為5(5就是元素的下標之差)組:

(96--142,107--146,145--134,137--32,106--86,所以這幾組元素都是對應關係。)。並讓步長在迴圈中每次變為上次的一半

其次,應該從下標等於步長處開始遍歷直至到達末尾。並使用一個臨時變數(temp)儲存每次遍歷到的值,為以後的插入排序做準備.

然後,就是遍歷陣列啦,按照一定規則(升序還是降序,根據需要,這裡以升序為例),用上面的臨時變數temp來和對應位置元素比較


特點:

1.在進行大量資料排序上,效率較高,因為相比於冒泡,選擇排序,其每次操作省略了三步賦值的開銷,只有一步。

2.希爾排序是一種不穩定的排序。當一個序列處於基本有序狀態時,其效率高。基本有序是指,按照其分組來看,其較大和較小

 元素分別處於兩邊。

希望能對大家有所幫助,有哪裡不對或者不同見解的也希望積極與我聯絡,一起溝通,共同進步。