各種排序演算法的時間效能比較

2021-06-21 05:49:08 字數 2693 閱讀 5893

#include

#include

using namespace std;

/**氣泡排序

原理:1.比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。

2.這樣對陣列的第0個資料到n-1個資料進行一次遍歷後,最大的乙個資料就"沉"到陣列第n-1個位置。

3.n=n-1,如果n不為0就重複前面二步,否則排序完成。

*/

void bubblesort(int , int n);

void bubblesort(int a, int n)}}

/**直接插入排序

原理:每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子串行中的適當位置,直到全部記錄插入完成為止。

1. 初始時,a[0]自成1個有序區,無序區為a[1..n-1]。令i=1

2. 將a[i]併入當前的有序區a[0…i-1]中形成a[0…i]的有序區間。

3.  i++並重複第二步直到i==n-1。排序完成。

*/

void selectsort(int a, int n);

void selectsort(int a, int n)

}/**希爾排序

原理:將需要排序的序列劃分成為若干個較小的子串行,對子序列進行插入排序,

通過則插入排序能夠使得原來序列成為基本有序。這樣通過對較小的序列進行插入排序,

然後對基本有序的數列進行插入排序,能夠提高插入排序演算法的效率。

*/

void shellsort(int ,int length);

void shellsort(int array,int length)

array[j+d] = temp;

}d= d/2;    //縮小增量}}

/**快速排序

原理:1.先從數列中取出乙個數作為基準數。

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有乙個數。

*/

void quicksort(int , int, int);

void quicksort(int s, int l, int r)

s[i] = x;

quicksort(s, l, i - 1); // 遞迴呼叫 

quicksort(s, i + 1, r);}}

/**歸併排序

原理:其的基本思路就是將陣列分成二組a,b,如果這二組組內的資料都是有序的,

那麼就可以很方便的將這二組資料進行排序。如何讓這二組組內資料有序了?

可以將a,b組各自再分成二組。依次類推,當分出來的小組只有乙個資料時,

可以認為這個小組組內已經達到了有序,然後再合併相鄰的二個小組就可以了

這樣通過先遞迴的分解數列,再合併數列就完成了歸併排序。

*/

void mergesort(int a, int first, int last, int temp);

void mergearray(int a, int first, int mid, int last, int temp);

void mergesort(int a, int n)

void mergesort(int a, int first, int last, int temp)

}//將有二個有序數列a[first...mid]和a[mid...last]合併。

void mergearray(int a, int first, int mid, int last, int temp)

while (i <= m)

temp[k++] = a[i++];

while (j <= n)

temp[k++] = a[j++];

for (i = 0; i < k; i++)

a[first + i] = temp[i];

}//顯示排序結果

void display(int );

void display(int a,int n)

int size = sizeof(a)/sizeof(int);

//starttime = time(null);

starttime = clock();

bubblesort(a,size);          //氣泡排序

//insertsort(a,size);         //直接插入排序

//selectsort(a,size);        //直接選擇排序

//shellsort(a,size);        //希爾排序

//quicksort(a,0,size-1);   //快速排序

//mergesort(a,size);      //歸併排序

endtime = clock();

totaltime = (double)( (endtime - starttime)/(double)clocks_per_sec );   //轉換為s《秒》

//endtime = time(null);

//display(a,size);

//usetime = difftime( starttime, endtime);

cout}

關於幾種排序演算法的時間效能比較

以前經常看到各種排序演算法,今天也對以下6種排序演算法的時間效能做了一次測試 測試 位址 1.氣泡排序 o n 2 氣泡排序 param arr 整形切片 func bubblesort arr int 2.插入排序 o n 2 插入排序 param arr 整形切片 func insertsort...

各種內排序演算法效能比較

各種內排序演算法效能比較 個人總結 穩定性最好情況 最壞情況 平均空間複雜度 確定最終位置 簡單選擇排序 屬於選擇排序 不穩定o n n 1趟 o n n 1趟 o n n 1趟 o 1 一趟排序後能確定某個元素的最終位置 直接插入排序 穩定o n n 1趟 o n n 1趟 反向有序 o n n ...

各種排序方法的效能比較

測試環境說明 win xp下,vs2008,主頻 core2 雙核2.53ghz 下面是測試的 using system using system.collections.generic using system.linq using system.text using system.collect...