資料結構與演算法7 希爾排序

2021-10-21 23:37:57 字數 1588 閱讀 2856

目錄

希爾排序---基於插入排序(效能比插入排序好,但不穩定)

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.插入排序的缺陷,多次移動 參見 插入排序 假如乙個很小的資料在靠右端的位置上。那麼要將該資料排序到正確的位置上,則所有的中間資料都需要向...