#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...