快速排序 有问题

来源:互联网 发布:怎么开启内网端口 编辑:程序博客网 时间:2024/05/16 11:16
#include<iostream>#include<iomanip>#define Max 20typedef int elemtype;typedef elemtype recs;void split(recs A[],int low,int high,int &i);void quicksort(recs A[],int s,int t);void qsort1(recs A[],int n);void qsort2(recs A[],int n); void main () {using namespace std; recs A[]={2,8,3,6,9,5,1,4,0,7}; recs B[]={2,8,3,6,9,5,1,4,0,7}; int n=10,i; cout << "quicksort" << endl << "before sort:";for(i=0;i<n;i++)cout << A[i] << "???"; cout << endl; qsort1(A,n); qsort2(B,n); cout << "after sort(recursion):"; for(i=0;i<n;i++) cout << A[i] <<" "; cout << endl; cout << "after sort (not recursion)"; for(i=0;i<n;i++) cout << B[i] << " "; cout << endl;}void split(recs A[],int low,int high,int &i){int j;elemtype x;i=low;j=high;x=A[i];while(i<j){while(A[j]>=x && i<j)j--;if(i<j){A[i]=A[j];i++;}while(A[i]<=x && i<j)i++;if(i<j){A[j]=A[i];j--;}}A[i]=x;}void quicksort(recs A[],int s,int t){int i;if(s<t){split(A,s,t,i);quicksort(A,s,i-1);quicksort(A,i+1,t);}}void qsort1(recs A[],int n){quicksort(A,0,n-1);}void qsort2(recs A[],int n){int i,l,h;int stack[Max][2],top=-1;l=0;h=n-1;top++;stack[top][0]=1;stack[top][1]=h;while(top>=0){l=stack[top][0];h=stack[top][1];top--;split(A,l,h,i);if(l<h){top++;stack[top][0]=i-1;stack[top][1]=i-1;top++;stack[top][0]=i+1;stack[top][1]=h;}}}

原创粉丝点击