6大排序演算法比較

2022-09-01 03:30:15 字數 2561 閱讀 6120

1 #include"

stdio.h

"2 #include"

stdlib.h

"3 #include"

string.h

"4 #include"

time.h"5

6#define list_init_size 50000

7int bj1,yd1,bj2,yd2,bj3,yd3,bj4,yd4,bj5,yd5,bj6,yd6,n;//

yd,bj為記錄關鍵字比較和移動的次數 89

struct

elemtype10;

1314

struct sqlist//

線性表15;19

2021

void createlist(sqlist &l)//

初始化順序表的,確定輸入資料個數n

22else flags = 0;//

跳出迴圈32}

33 l.elem=(elemtype*)malloc(list_init_size*sizeof(elemtype));//

分配記憶體

34if(!l.elem)exit(0

);35}36

37void random(sqlist &l)//

隨機數產生程式

3848}49

50void memory(sqlist &m,sqlist &l)//

記錄l,使每個排序演算法都用一組相同的隨機數

5160}61

62void bubblesort(sqlist &l)//

氣泡排序

6377}78

}79}80

81void insertsort(sqlist &l)//

直接插入排序

8299 l.elem[j+1].key=l.elem[0

].key;

100 yd2++;//

比較次數+1

101}

102}

103}

104105

106107

void selectsort(sqlist &l)//

選擇排序

108118

if(i!=k)

119125

}126

}127

128129

int partition(sqlist &l,int low,int high)//

快速排序

130149 l.elem[low]=l.elem[0

];150 yd4++;//

交換次數+1

151return

low;

152}

153void qsort(sqlist &l,int low,int high)//

對順序表的子串行作快速排序

154162

}163

164void quicksort(sqlist &l)//

對順序表l作快速排序

165168

169170

void shellsort(sqlist &l)//

希爾排序

171185 l.elem[j+dh].key = l.elem[0

].key;

186 yd5+=1;//

交換次數+1

187}

188 dh/=2

;189

}190

}191

192/*

193*調整陣列a中以k為根的子串行為堆,其中最大的元素下標為m

194*假設以2k,2k+1為根的左右子樹均是堆

195*/

196void heapadjust(sqlist &l,int k,int

m)197

212if(x>=l.elem[j].key)finished = 1;//

若原根最大,置搜尋和帥選結束標誌

213else

219}

220 l.elem[i].key = x;//

將原根值填充到所搜尋到的當前的空位置中

221 yd6+=1;//

交換次數+1

222}

223224

225void heapsort(sqlist &l)

226233

for(i=l.length;i>=2;i--)//

控制排序過程

234242

243}

244245

void print(sqlist &l)//

輸出順序表重元素

246253 printf("\n"

);254

}255

256int

main()

257273

switch

(a)274

315}

316return

0;

317 }

十大排序演算法比較

穩定性 如果a原本在b前面,而a b,排序之後a仍然在b的前面則為穩定,排序之後 a 可能會出現在 b 的後面即為不穩定。不穩定的排序演算法 快速排序,希爾排序,選擇排序和堆排序。時間複雜度如下 圖 於 插入排序是將每乙個元素都與前面的元素比較,小的放在前面。如下 void insert sort ...

各大排序演算法比較

一 各種演算法比較序號 排序類別 時間複雜度 空間複雜度穩定1 插入排序 o n2 1 2希爾排序 o n2 1 3氣泡排序 o n2 1 4選擇排序 o n2 1 5快速排序 o nlogn o logn 6 堆排序o nlogn 1 7歸併排序 o nlogn o n 1氣泡排序 bubble ...

8大排序演算法

一 各個排序演算法的過程 1 直插入排序 乙個個的進行插入,直到有序序列。穩定的。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。具體實現 如下 時間複雜度 o n 2 void insertsort int a,int n 3 選擇排序 按大小順序一次選出,進行公升降排列。在要排序的一組數中,選出...