快速排序

来源:互联网 发布:windows韩文版 编辑:程序博客网 时间:2024/05/24 04:58

代码如下:

void qsort(int* a,int n){if(n<=1){return;}int i=1,j=n-1;int temp;while(i<=j){while(a[i]<=a[0] && i<=n-1)i++;while(a[j]>=a[0] && j>=1)j--;if(i<=n-1 && j>=1 && i<j ){temp=a[i];a[i]=a[j];a[j]=temp;}}if(i>1){temp=a[0];a[0]=a[i-1];a[i-1]=temp;qsort(a,i-1);}qsort(a+i,n-i);}

完整代码:

#include <iostream>#include <cassert>using namespace std;void qsort(int* a,int n){if(n<=1){return;}int i=1,j=n-1;int temp;while(i<=j){while(a[i]<=a[0] && i<=n-1)i++;while(a[j]>=a[0] && j>=1)j--;if(i<=n-1 && j>=1 && i<j ){temp=a[i];a[i]=a[j];a[j]=temp;}}if(i>1){temp=a[0];a[0]=a[i-1];a[i-1]=temp;qsort(a,i-1);}qsort(a+i,n-i);}void produce(int *a,int n){assert(RAND_MAX==0x7fff);for(int i=0;i<n;i++){int r;while((r=rand())>=30000);a[i]=r;}}void check(int* a,int n){for(int i=0;i<n-1;i++){assert(a[i]<=a[i+1]);}}void print(int *a,int n){for(int i=0;i<n;i++){cout<<a[i]<<"\t";}cout<<endl;}int main(){int a[1000];int n=sizeof(a)/sizeof(int);produce(a,n);print(a,n);qsort(a,n);print(a,n);check(a,n);system("pause");return 0;}


0 0
原创粉丝点击