C語言實現排序演算法---希爾排序
阿新 • • 發佈:2018-12-23
今天又重新研究了一遍諸多排序演算法,現在簡單分享一下里面的希爾排序(Shell Sort)的心得。
希爾排序是非穩定排序演算法。該方法因DL.Shell於1959年提出而得名。
使用該演算法,應首先為待排序元素序列選擇一個不大於元素個數的增量,或者也稱步長(step)。其本質是給元素序列分組。
現在我們有如下一組資料:
96,107, 145, 137, 106, 142, 146, 134, 32, 86
一般我們會選擇元素個數的一半作為步長(這裡元素個
(96--142,107--146,145--134,137--32,106--86,所以這幾組元素都是對應關係。)。並讓步長在迴圈中每次變為上次的一半。
其次,應該從下標等於步長處開始遍歷直至到達末尾。並使用一個臨時變數(temp)儲存每次遍歷到的值,為以後的插入排序做準備.
然後,就是遍歷陣列啦,按照一定規則(升序還是降序,根據需要,這裡以升序為例),用上面的臨時變數temp來和對應位置元素比較
特點:
1.在進行大量資料排序上,效率較高,因為相比於冒泡,選擇排序,其每次操作省略了三步賦值的開銷,只有一步。
2.希爾排序是一種不穩定的排序。當一個序列處於基本有序狀態時,其效率高。基本有序是指,按照其分組來看,其較大和較小
元素分別處於兩邊。
希望能對大家有所幫助,有哪裡不對或者不同見解的也希望積極與我聯絡,一起溝通,共同進步。