【排序】快速排序 && 選擇排序 && sort() 比較
阿新 • • 發佈:2018-11-24
#include <iostream> #include <cstdio> #include <algorithm> #include <ctime> #include <cstdlib> using namespace std; const int maxn = 10000; int a[maxn],b[maxn],c[maxn]; void quicksort(int *a,int left,int right) { int i,j; if(left<right) { i=left;j=right; a[0]=a[i]; while(i!=j) {//向左找小於a[0]的數 while(a[j]>a[0] && i<j) j--; if(i<j) { a[i]=a[j]; i++; } //向右找大於當前儲存的數 while(a[i]<a[0] && i<j) i++; if(i<j) { a[j]=a[i];j--; } } a[i]=a[0]; quicksort(a,left,i-1); quicksort(a,i+1,right); } } void select_sort(int *a) { int i,j,t,tt; for(i=1;i<=maxn-2;i++) { t=i; for(j=i+1;j<=maxn-1;j++) { if(a[t]>a[j]) { t=j; } } if(t!=i) { tt=a[i];a[i]=a[t];a[t]=tt; } } } int main () { int i; a[0]=0;b[0]=0;c[0]=0; clock_t start, finish; double T; start = clock(); //陣列a賦值 for(i=1;i<maxn;i++) { a[i]=(rand()%(10000+1)); } quicksort(a,1,maxn-1); finish = clock(); T = (double)(finish - start) / CLOCKS_PER_SEC; printf("quicksort:Running Time:%lf\n",T); //陣列b賦值 for(i=1;i<maxn;i++) { b[i]=(rand()%(10000+1)); } start = clock(); select_sort(b); finish = clock(); T = (double)(finish - start) / CLOCKS_PER_SEC; printf("select_sort:Running Time:%lf\n",T); //陣列c賦值 for(i=1;i<maxn;i++) { c[i]=(rand()%(10000+1)); } start = clock(); sort(c+1,c+maxn); finish = clock(); T = (double)(finish - start) / CLOCKS_PER_SEC; printf("sort():Running Time:%lf\n",T); return 0; }