/* 說明:以下排序演算法將分別對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.陣列要宣告元素的型別,集合類的元素型...