希爾排序就是在插入排序的基礎上新增乙個分組的步驟。。。。先分組再對分的組分別進行插入排序。由於一開始分組的時候間隔比較大,每一組的元素個數比較少,此時插入排序的效率比較高。雖然後面進行分組的時候間隔小了,但是因為之前進行插入排序的時候資料已經基本有序了,此時插入排序的效率比直接對整個陣列去插入排序的效率提高了不少。
當陣列分組的間隔是1的時候,此時相當於對整個陣列進行直接插入排序,排序完後,陣列變有序。
//希爾排序
void shell_sort(int a, int n)
}} }
}
直接插入排序:
/*插入排序將陣列分成有序和無序兩個部分
在有序陣列中查詢無序部分最左邊的元素應該插入到有序陣列的位置,
把這個位置及其之後的陣列元資料往後移動一位,然後將待排序的元素插入到
這個位置*/
//插入排序 從小到大排序
void insert_sort(int a, int size)
} }}
插入排序 希爾插入排序
本文借鑑於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 ...