目錄
希爾排序---基於插入排序(效能比插入排序好,但不穩定)
1.簡介
1.1 基本實現
1.2 gap的選擇和位運算優化: gap 一般選 陣列長度1/2
1.3 gap的選擇
1.4 耗時比較 shell knuth序列 效能比sort函式查一倍
特點:間隔大,移動次數少; 間隔小移動距離短。 (比普通插入排序效率好,但不穩定)
演算法特點: 最優 n^1.3 最差n^2 最好 n 空間複雜度o(1) 不穩定
#include#include#include#include#includeusing namespace std;
class insertsort;
~insertsort(){};
int sort(vector&arr)
arr[index]= tmp;
}void genrandarr(vector&arr)
int sort(vector&arr);
~insertsort(){};
int sort(vector&arr)
arr[index]= tmp;
}void genrandarr(vector&arr)
{ srand(time(0));
for(int i=0; i&arr)
{ for(int i=0; i& arr1, vector&arr2)
{ for(int i=0; iarr1(arr_size);
vectorarr2(arr_size);
vectorarr3(arr_size);
clock_t t;
long sec;
insertsort ins;
ins.genrandarr(arr1);
// ins.print(arr1);
memcpy((void*)&arr2[0],(void*)&arr1[0], arr_size*sizeof(int));
memcpy((void*)&arr3[0],(void*)&arr1[0], arr_size*sizeof(int));
t =clock();
ins.k_sort(arr3);
sec = (clock()-t);
cout<<"shell ksort time =" 《結果
797161
shell ksort time =430303 clock
sortlib time =716167 clock
shell sort time =616954 clock
shell 排序比系統提供的庫快一點
shell ksort time =3524 clock // kunth 序列
sortlib time =4869 clock // 系統庫
insert sort time =1300953 clock //插入排序
資料結構與演算法 希爾排序
希爾排序又稱縮小增量排序,實質上是分組直接插入排序。為了方便理解,先不討論如何獲得合適的增量陣列和整個演算法的 1 修改直接插入排序的 實現增量為gap的直接插入排序。將陣列從start到end中間隔為gap的子串行進行直接插入排序 private static void straightinser...
資料結構 演算法 希爾排序
希爾排序過程 希爾排序的基本思想是 將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列 步長更長了,列數更少了 來進行。最後整個表就只有一列了。將陣列轉換至表是為了更好地理解這演算法,演算法本身還是使用陣列進行排序。def shell sort alist 希爾排序 n len...
資料結構與演算法(八)希爾排序
希爾排序 1.希爾排序的產生 希爾排序是由科學家donald l.shell提出的,希爾排序基於插入排序,並新增了一些新的特性,從而大大提高插入排序的執行效率。2.插入排序的缺陷,多次移動 參見 插入排序 假如乙個很小的資料在靠右端的位置上。那麼要將該資料排序到正確的位置上,則所有的中間資料都需要向...