排序演算法總結對比

2021-09-20 02:59:52 字數 2200 閱讀 4392

/*

常用排序演算法分析

*/void swap(int& x,int& y)}/*

氣泡排序

時間複雜度為o(n^2)

兩兩比較,交換,每次內層迴圈在未排序序列中找出最大值放到已排序中

對於部分有序的序列來說,效率較高

穩定*/

void bubble_sort(int* arr,int start,int end)

} if(pos != -1)else }}

/*選擇排序

o(n^2)

在未排序序列中查詢最大或最小值,放在已排序序列的尾部或頭部

不穩定*/

void select_sort(int* arr,int start,int end)

} swap(arr[maxnumpos],arr[start + end - i]); }}

/*插入排序

o(n^2)

從未排序序列中取乙個數值插入已排序序列中對應位置

穩定*/

void insert_sort(int* arr,int start,int end)

} arr[pos] = num; }}

/*快速排序

nlog(n)

分治法不穩定

*/void quick_sort(int* arr,int left,int right)

arr[dw] = key;

quick_sort(arr,left,dw - 1);

quick_sort(arr,dw + 1,right);}/*

桶排序o(n)

需要使用輔助空間,在集合範圍較小的情況下推薦使用,效率很高

穩定*/

void bucket_sort(int* bucket,int* arr,int start,int end)

if(minnum > arr[i])

} for(int i = start; i <= end; i++)

int ncount = start;

for(int i = 0; i <= max_length; i++)

if(ncount > end)

break; }}

/*歸併排序

nlog(n)

需要輔助空間

穩定*/

void merge_cal(int* total,int* arr,int start,int end)

else

} while(firststart <= firstend)

while(secondstart <= secondend)

for(int i = 0; i < ncount; i++)

}void merge_sort(int* total,int* arr,int start,int end)

之前認為冒泡與插入選擇的時間複雜度都是o(n^2),所以以為使用哪一種都是一樣的,但是通過對比發現,氣泡排序是最慢的一種。

橫座標為隨機資料量,縱座標為排序時間ms

從圖中看出氣泡排序是最慢的,插入和選擇所用的時間差不多,快速排序在這點資料量面前所用時間幾乎為0.下面是具體資料。

在將快速排序,歸併排序,和桶排序一起比較

可以看出,桶排序的時間複雜度幾乎為0,快速排序與歸併排序差不多,但是快速排序比歸併排序要快一些,造成這樣的原因可能是因為,快速排序是在原資料上直接修改,而歸併排序不是且需要一次拷貝。下面是具體資料,

從上面對比可以看出,如果只論時間複雜度來說一定是桶排序獲勝,如果論時間與空間複雜度還是快速排序更勝一籌。

但是快速排序是不穩定的,而桶排序與歸併排序是穩定的。桶排序所耗空間複雜度取決於資料的範圍而非資料量,適用於資料範圍較小的排序,比如1000萬學生的成績排序。而歸併排序所耗空間複雜度為o(n)與資料量相關。所以在使用還是要考慮場景和需求。

排序演算法總結對比

0.十大經典排序演算法 1.排序演算法分類 非線性時間比較類排序 通過比較來決定元素間的相對次序,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間非比較類排序 不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排...

0 演算法總結對比 更新中

排序過程元素位置移動的程度 演算法移動的時間衡量 通過演算法遍歷元素個數體現 演算法是否需要額外的空間 名稱效能 演算法思想 演算法型別 時間複雜度 平均時間複雜度 空間複雜度 穩定性適用資料場景 選擇排序 一般元素移位節約空間消耗時間 比較型o n o n o 1 不穩定不常用 氣泡排序 一般比較...

排序演算法對比

2019 september 07 排序演算法對比 排序演算法 平均時間複雜度 最好情況 最壞情況 空間複雜度 原址排序 比較排序 穩定插入排序 theta left n right theta left n right theta left n right mathbf left 1 right ...