排序演算法總結與測試

2022-04-30 14:48:11 字數 4220 閱讀 5425

本文主要對常用的排序演算法進行測試,分析總結。

wiki 上的總結對比非常詳細:

專案原始碼:

sort演算法原始碼:/blob/master/src/sort.cc

sort演算法測試原始碼:/blob/master/test/sort_test.cc

3.1 測試資料

有四組測試資料,如下所示:

const

struct 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]; 

該陣列中的資料都是隨機生成的,**如下:

static

int 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, const

intsize);

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...