希爾排序又稱縮小增量排序,它也是一種插入排序類方法,但在時間效率較前幾種有較大的的改進。
先將整個待排記錄序列分割成若干個子串行分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。
}}希爾排序的分析是個複雜的問題,因為它的時間是所取「增量"的序列函式,這涉及一些數學上尚未解決的難題。應使增量序列中的值沒有除1以外的公因子,並且最後乙個增量值必須等於1。直接插入排序時間複雜度t(n) = o(n^2),在記錄較少、基本有序是效率較高的,但資料量比較大時就不高效了,所以當資料量大,資料無序時就使用希爾排序,這正是希爾排序分割子串行帶來的高效之處。最佳情況:t(n) = o(nlogn)。最壞情況:t(n) = o(n^2)。平均情況:t(n) = o(nlogn)。希爾排序是不穩定的排序演算法。
插入排序 希爾插入排序
本文借鑑於lsgo實驗室創始人馬老師 演算法 希爾插入排序 delta len nums 2 while delta 0 shell delta,nums delta delta 2return nums defshell delta,key for i in range delta,len key...
插入排序 希爾排序
我們知道當乙個序列基本有序時,直接插入會變得很高效。因為此時只需少量的移動元素,操作集中在元素的比較上。基於這種想法,我們就試圖把乙個序列在進行直接插入前調整得盡量有序。這就是希爾排序 shell sort 的核心思路。shell只是演算法發明者的名字,無特殊含義 那到底該怎麼做呢?希爾排序一反以前...
插入排序 希爾排序
希爾排序 先將整個待排序的記錄序列分割成為若干子串行分別進行直接插入排序,待整個序列中的記錄 基本有序 時,再對全體記錄進行依次直接插入排序。以n 10的乙個陣列49,38,65,97,26,13,27,49,55,4為例 第一次 gap 10 2 5 4938 6597 2613 2749554 ...