因為幾個演算法使用了遞迴,這裡測試用的陣列大小又比較大,如果使用vs編譯的話,需要調整一下堆疊的大小,否則容易發生stackoverflow的錯誤。
**如下
#include"stdafx.h"
#include
#include
#include
using
namespace
std;
#define num 50000;
void bubblesort(int temp1, int length);
void insertsort(int temp2, int length);
void shellsort(int te***, int length);
void selectsort(int temp4, int length);
void mergesort(int temp5, int left, int right);
void quicksort(int temp6, int left, int right);
void heapsort(int temp7, int length);
void heaprebuild(int arr, int root, int size);
int main()
//氣泡排序
void bubblesort(int temp1, int length)}}
clock_t end = clock();
cout
<< "time taken by bubblesort:\t"
<< (double)(end - start) / clocks_per_sec << "seconds"
<< endl;
}//插入排序
void insertsort(int temp2, int length)//有陣列的地方需要考慮邊界
}if (j != i - 1)
(*(temp2 + k + 1)) = temp;}}
clock_t end = clock();
cout
<< "time taken by insertsort:\t"
<< (double)(end - start) / clocks_per_sec << "seconds"
<< endl;
}//希爾排序;
void shellsort(int te***, int length)}}
clock_t end = clock();
cout
<< "time taken by shellsort:\t"
<< (double)(end - start) / clocks_per_sec << "seconds"
<< endl;
}//選擇排序;
void selectsort(int temp4, int length)
}temp = (*(temp4 + i));
(*(temp4 + i)) = (*(temp4 + min));
(*(temp4 + min)) = temp;
}clock_t end = clock();
cout
<< "time taken by selectsort:\t"
<< (double)(end - start) / clocks_per_sec << "seconds"
<< endl;
}//歸併排序;
void mergesort(int temp5, int left, int right)
else
}while (i <= mid)
while (j <= right)
for (int l = 0; l//快速排序;
void quicksort(int temp6, int left, int right)
if (iwhile ((iif (i//到此,一輪基於基數的交換完成
quicksort(temp6, left, i - 1);//縮小範圍,在left到i-1範圍內的數都比剛才的基數小,在這個範圍內再選出基數做重複交換,不斷遞迴,直到leftquicksort(temp6, i + 1, right);
}}//堆排序;
/*堆排序是一種基於二叉堆這個資料結構的排序演算法,屬於原地排序
二叉堆滿足二個特性:
1.父結點的鍵值總是大於或等於(小於或等於)任何乙個子節點的鍵值。
2.每個結點的左子樹和右子樹都是乙個二叉堆(都是最大堆或最小堆)。
*/void heapsort(int temp7, int length)
int last = length - 1;
for (int i = 1; i <= length; i++, last--)
}void heaprebuild(int temp7, int root, int size)}}
常見的七種排序
排序演算法大體可分為兩類 非線性時間比較類排序 交換類排序 快速排序和氣泡排序 插入類排序 簡單插入排序和希爾排序 選擇類排序 簡單選擇排序和堆排序 歸併排序 二路歸併排序和多路歸併排序 線性時間非比較類排序 計數排序,桶排序,和基數排序 氣泡排序 重複地走訪過要排序的元素列,依次比較兩個相鄰的元素...
C 實現七種經典排序演算法
具體的排序方法如下所示 1 氣泡排序 基本思想 比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出乙個未排序中最大的數放到陣列後面。常見氣泡排序演算法如下所示 void bubblesort int arr,int n 公升級版氣泡排序法 通過從低到高選出最大的數放到後面,再從高到...
七種常見經典排序演算法總結 C
最近想複習下c 很久沒怎麼用了,畢業時的一些經典排序演算法也忘差不多了,所以剛好一起再學習一遍。除了冒泡 插入 選擇這幾個複雜度o n 2 的基本排序演算法,希爾 歸併 快速 堆排序,多多少少還有些晦澀難懂,幸好又大神dreamcatcher cx都總結成了 一步步很詳細,十分感謝。而且就時間複雜度...