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 選擇排序 按大小順序一次選出,進行公升降排列。在要排序的一組數中,選出...