排序總結——————資料結構
阿新 • • 發佈:2019-01-04
文章目錄
八中排序方式的對比
資料生成
我採用隨機函式來生成隨機資料,將生成的資料儲存在.txt檔案裡
生成的資料大小範圍在 內,生成的資料完全是隨機的
其中
採用當前時間來作為隨機數種子
srand(time(NULL));//隨機數種子
生成的資料將儲存在檔名為以下的檔案裡
程式碼如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
freopen("1e6.txt","w",stdout);//輸出到檔案
int n = 1e6;//資料量的大小
srand(time(NULL));//隨機數種子
for(int i=0;i<n;i++)
printf("%d ",(abs(rand())+n)%n);
return 0;
}
排序演算法
將會進行以下幾種排序演算法比較,
分別比較它們的
- 執行時間:(ms)
- 交換次數:
- 移動次數:
八中排序演算法:
- 插入排序
- 折半插入排序
- 希爾排序
- 氣泡排序
- 簡單選擇排序
- 快速排序
- 堆排序
- 歸併排序
效能比較
這些排序演算法的效能比較如上圖所示,我們通過時間複雜度可以看出, 的演算法肯定是最慢的,而堆排序,快速排序,歸併排序的平均時間複雜度是 ,顯然比其他演算法快一些。
我們用這些演算法對相同的隨機資料進行排序,觀察一下它們的執行時間,移動次數,交換次數,來進行更加直觀的分析。
執行時間比較(ms)
排序演算法 資料大小 | 1e3 | 1e4 | 1e5 | 1e6 |
---|---|---|---|---|
InsertSort | 1 | 87 | 7809 | 889262 |
BInsertSort | 1 | 75 | 6828 | 838490 |
ShellSort | 0 | 1 | 37 | 413 |
BubbleSort | 3 | 1 | 39693 | 3890712 |
QuickSort | 0 | 1 | 15 | 151 |
SelectSort | 1 | 120 | 11775 | 1131986 |
HeapSort | 0 | 2 | 21 | 564 |
MergeSort | 0 | 1 | 23 | 184 |
我們觀察執行時間(單位ms),資料是1e3的時候看不出來大的差別,但是當資料逐漸增多,不同的演算法排序所用的時間差別也越來越大!
在資料為1e6的時候,快速排序將1e6的資料排完序僅用了0.1s,而氣泡排序將這些資料排序成功需要花費一個多小時,現在我們做的才僅僅是百萬級別的資料,和普通的演算法相比,優秀的演算法要比它快三萬倍。
在這個大資料的時代,演算法的重要性不言而喻。
移動次數比較
排序演算法 資料大小 | 1e3 | 1e4 | 1e5 | 1e6 |
---|---|---|---|---|
InsertSort | 251935 | 24834732 | 2498350057 | 249759429861 |
BInsertSort | 251944 | 24834740 | 2498350073 | 249759429905 |
ShellSort | 11041 | 204402 | 3532741 | 52682333 |
BubbleSort | 250945 | 24824741 | 2498250074 | 249758429906 |
QuickSort | 4770 | 61112 | 763306 | 8243154 |
SelectSort | 995 | 9990 | 99988 | 999957 |
HeapSort | 10553 | 139191 | 1725178 | 20549336 |
MergeSort | 19952 | 267232 | 3337856 | 39902848 |
交換次數比較
排序演算法 資料大小 | 1e3 | 1e4 | 1e5 | 1e6 |
---|---|---|---|---|
InsertSort | 990 | 9991 | 99983 | 999955 |
BInsertSort | 999 | 9999 | 99999 | 999999 |
ShellSort | 3834 | 57433 | 763790 | 8369173 |
BubbleSort | 250945 | 24824741 | 2498250074 | 249758429906 |
QuickSort | 697 | 6929 | 74695 | 867486 |
SelectSort | 995 | 9990 | 99988 | 999957 |
HeapSort | 10553 | 139191 | 1725178 | 20549336 |
MergeSort | 250945 | 24824741 | 2498250074 | 249758429906 |
本文僅代表個人觀點。