本文主要對常用的排序演算法進行測試,分析總結。
wiki 上的總結對比非常詳細:
專案原始碼:
sort演算法原始碼:/blob/master/src/sort.cc
sort演算法測試原始碼:/blob/master/test/sort_test.cc
3.1 測試資料
有四組測試資料,如下所示:
conststruct arrsize arr_sizes =, //
1 million * 20 = 20 million
, //
10 million * 20 = 200 million
, //
100 thousand * 200 = 20 million
, //
100 thousand * 2000 = 200 million
};
例如,對於 就是100萬個大小為20的陣列。即 int arr[1000000][20];
該陣列中的資料都是隨機生成的,**如下:
staticint generate_arrays(int **a, int size_1d, int
size_2d)
;
intmi;
for (int iii = 0; iii < size_1d; iii++)
}return0;
}
3.2 測試方法
1. 先隨機生成乙個陣列 array_orig[size_1d][size_2d]; 如上例,size_1d 就是100萬,size_2d就是20。
2. 將該陣列拷貝乙份 array_expected[size_1d][size_2d]; 然後使用stl sort對該陣列進行排序。該陣列就是排好序的。
3. 測試sort演算法,比如bubble_sort()
3.1 將array_orig[size_1d][size_2d] 拷貝乙份 array[size_1d][size_2d];
3.2 使用bubble_sort() 對array[size_1d][size_2d]進行排序
3.3 比較array[size_1d][size_2d] 和 array_expected[size_1d][size_2d] 是否相等。
**如下:
typedef void (* sortfunction)(int a, constintsize);
static
int test_sort(const
char *function_name, sortfunction sort_f)
3.3 測試資料
/*test data:
it takes 664.014 ms to generate arrays: 1000000 * 20
test_insert_sort total run time = 183 ms when arrays is: 1000000 * 20
test_stl_sort total run time = 245 ms when arrays is: 1000000 * 20
test_quick_sort total run time = 310 ms when arrays is: 1000000 * 20
test_select_sort total run time = 411 ms when arrays is: 1000000 * 20
test_merge_sort total run time = 483 ms when arrays is: 1000000 * 20
test_bubble_sort total run time = 530 ms when arrays is: 1000000 * 20
it takes 6642.19 ms to generate arrays: 10000000 * 20
test_insert_sort total run time = 1862 ms when arrays is: 10000000 * 20
test_stl_sort total run time = 2446 ms when arrays is: 10000000 * 20
test_quick_sort total run time = 3071 ms when arrays is: 10000000 * 20
test_select_sort total run time = 4106 ms when arrays is: 10000000 * 20
test_merge_sort total run time = 4791 ms when arrays is: 10000000 * 20
test_bubble_sort total run time = 5324 ms when arrays is: 10000000 * 20
it takes 801.532 ms to generate arrays: 100000 * 200
test_insert_sort total run time = 665 ms when arrays is: 100000 * 200
test_stl_sort total run time = 431 ms when arrays is: 100000 * 200
test_quick_sort total run time = 513 ms when arrays is: 100000 * 200
test_select_sort total run time = 1578 ms when arrays is: 100000 * 200
test_merge_sort total run time = 756 ms when arrays is: 100000 * 200
test_bubble_sort total run time = 3317 ms when arrays is: 100000 * 200
it takes 9591.41 ms to generate arrays: 100000 * 2000
test_insert_sort total run time = 52265 ms when arrays is: 100000 * 2000
test_stl_sort total run time = 5953 ms when arrays is: 100000 * 2000
test_quick_sort total run time = 7375 ms when arrays is: 100000 * 2000
test_select_sort total run time = 112452 ms when arrays is: 100000 * 2000
test_merge_sort total run time = 10539 ms when arrays is: 100000 * 2000
test_bubble_sort total run time = 236275 ms when arrays is: 100000 * 2000
sort_test.cc total run time=482889 ms
*/
3.4 結果分析
1. 當陣列大小較小時,例如20,插入排序是最優的
2. 當陣列大小較大時,stl sort排序是最優的。(stl sort還有待研究。。)
1. sorting algorithm.
2. benchmarks: 14 sorting algorithms and php arrays.
3. compare sorting algorithms' performance. '_performance
排序演算法 總結與複習
直接插入排序 穩定排序 時間複雜度 o n2 void insertsort int data,int n if j i 1 data j 1 temp view code 二分法插入排序 穩定排序 o n2 void binsort int data,int n for int j i 1 j l...
資料結構與演算法 排序演算法總結
排序演算法 1 冒泡 對資料的有序性 敏感,一旦排序完成就會 立刻停止,如果待排序的資料是基本有序的,他的排序效率是非常高的。也是實現最簡單的排序,不易出錯,安全性高。2 插入 在已經有序的資料中,新增新的資料,對這個組資料再進行排序比較適合插入排序。3 選擇 是氣泡排序的變種,不是正統的排序方法,...
資料結構與演算法 排序演算法總結
前言 這是我考研時根據率輝老師的 高分筆記 總結的。名稱 空間複雜度 最好情況下時間複雜度 最差情況下時間複雜度 穩定性直接插入排序 o 1 已經有序,雙層迴圈變為單層,o n o n2 穩定希爾排序 o 1 無o n2 不穩定氣泡排序 o n 已經有序,o n o n2 穩定快速排序 o log2...