C 六種排序演算法的時間比較

2021-10-08 22:41:02 字數 3726 閱讀 8015

/* 說明:以下排序演算法將分別對1000、1萬、10萬、100萬個隨機數進行排序,記錄排序所需時間,並進行比較。vs2017 */

#include

#include

#include

using

namespace std;

#define max 1000

int a[max]

;//氣泡排序法

void

bubble

(int a,

int size)

if(work)

break;}

}int

main()

總結:比較相鄰的元素,如果前者大於後者,則二者交換。一直進行相同的操作,直到最大的元素「浮」到數列的末端。並對所有元素進行相同的步驟,直到排序完成。

1000隨機數:時間為0.003s

1萬隨機數:時間為0.57s

10萬隨機數:時間為40.224s

100萬隨機數:時間未知(好幾分鐘沒有結果)

#include

#include

#include

using

namespace std;

#define max 1000

int a[max]

;//歸併排序法

void

merge

(int arr,

int l,

int m,

int r)

for(i = m; i <= r; i++

) i =0;

j =0;

k = l;

while

(i < left_size && j < right_size)

else

}while

(i < left_size)

while

(j < right_size)

}void

mergesort

(int arr,

int l,

int r)

}int

main()

總結:把長度為n的陣列分成兩個長度為n/2的陣列。對這兩個陣列分別再採用歸併排序。最後將兩個排序好的陣列合併成乙個陣列。

1000隨機數:時間為0.001s

1萬隨機數:時間為0.049s

10萬隨機數:時間為6.908s

100萬隨機數:時間未知(好幾分鐘沒有結果)

#include

#include

#include

using

namespace std;

#define max 1000

int a[max]

;//快速排序法

void

quick_sort

(int left,

int right)

} a[left]

= a[l]

; a[l]

= temp;

quick_sort

(left, l -1)

;quick_sort

(l +

1, right);}

intmain()

總結:在數列中選擇乙個元素作為「基準」。將數列中比基準值小的元素擺放在基準值的前面,將比基準值大的元素放在其後面。然後進行遞迴,以同樣的方法將兩個子數列進行排序。

1000隨機數:時間為0.001s

1萬隨機數:時間為0.005s

10萬隨機數:時間為0.139s

100萬隨機數:時間為10.624s

#include

#include

#include

using

namespace std;

#define max 1000

int a[max]

;//選擇排序法

void

selection_sort

(int a,

int n)}}

intmain()

總結:首先在未排序序列中找到最小的元素,放在陣列的首位,然後,從剩餘未排序元素中尋找最小元素,找到後放在已排序序列末尾。直到所有元素排列完成。

1000隨機數:時間為:0.004s

1萬隨機數:時間為:0.225s

10萬隨機數:時間為:34.125s

100萬隨機數:時間未知(好幾分鐘沒有結果)

#include

#include

#include

using

namespace std;

#define max 1000

int a[max]

;//插入排序法

void

insert_sort

(int a,

int length)}}

intmain()

總結:將陣列第乙個元素認為是有序陣列,然後比較第二個元素與第乙個元素的大小,有序排列。將陣列後面乙個元素插入到前面的有序陣列中,一直重複至排序完成。

1000個隨機數:時間為:0.003s

1萬個隨機數:時間為:0.195s

10萬個隨機數:時間為:21.671s

100萬個隨機數: 時間未知(好幾分鐘沒有結果)

#include

#include

#include

using

namespace std;

#define max 1000

int a[max]

;//希爾排序法

void

shell_sort

(int a,

int n)

a[k + gap]

= temp;}}

}}}int

main()

總結:希爾排序是插入排序改良的演算法,希爾排序步長從大到小調整,第一次迴圈後面元素逐個和前面元素按間隔步長進行比較並交換,直至步長為1。

1000隨機數:時間為:0.001s

1萬隨機數:時間為:0.051s

10萬隨機數:時間為:5.253s

100萬隨機數:時間未知(好幾分鐘沒有結果)

1.對1000個隨機數進行排序:

六種排序演算法的所需時間均接近0.001s,速度都很快。

2.對1萬個隨機數進行排序:

快速0.005s < 希爾0.051s < 歸併0.049s < 插入0.195s < 選擇0.225s < 冒泡0.57s

很明顯,快速排序法最快,氣泡排序法最慢。

3.對10萬個隨機數進行排序:

快速0.139s < 希爾5.253s < 歸併6.908s < 插入21.671s < 選擇34.125s < 冒泡40.224s

快速排序法最快,氣泡排序法最慢。

4.對100萬個隨機數進行排序:

快速10.624s,其餘演算法時間未知,幾分鐘內排序無法完成。

演算法的六種排序

一 選擇排序法 簡單選擇排序是最簡單直觀的一種演算法,基本思想為每一趟從待排序的資料元素中選擇最小 或最大 的乙個元素作為首元素,直到所有元素排完為止,簡單選擇排序是不穩定排序。for int i 0 i arr.length 1 i 簡單選擇排序通過上面優化之後,無論陣列原始排列如何,比較次數是不...

六種排序的C 實現

class sortnum 具體實現 view plain copy to clipboard print?include sortnum.h include iostream.h construction destruction sortnum sortnum sortnum sortnum 交換...

C 六種集合效能比較

一.先來說說陣列的不足 也可以說集合與陣列的區別 1.陣列是固定大小的,不能伸縮。雖然system.array.resize這個泛型方法可以重置陣列大小,但是該方法是重新建立新設定大小的陣列,用的是舊陣列的元素初始化。隨後以前的陣列就廢棄!而集合卻是可變長的 2.陣列要宣告元素的型別,集合類的元素型...