#include#include#define maxnum 10
void shellsort(int array,int n,int t);
int dkhibbard(int t,int k);
void shellinsert(int array,int n,int dk);
int main()
; int i;
shellsort(array,maxnum,int(log((double)maxnum)/log(2.0)));//int(log((double)maxnum)/log(2.0))為排序趟數
for(i=0;i=i%dk)&&array[j]>temp;j-=dk)//同時進行比較和後移
if(j!=i-dk)
}}
先取乙個小於n的整數d1作為第乙個 增量,把檔案的全部記錄分組。所有距離為d1的倍數的記錄放在同乙個組中。先在各組內進行 直接插入排序;然後,取第二個增量d2以此類推。
希爾排序優點:不需要大量的輔助空間。希爾排序是基於插入排序的一種演算法, 在此基礎之上增加了乙個新的特性,提高了效率。
插入排序 希爾插入排序
本文借鑑於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 ...