#include<iostream>
#include<iomanip>
#define Max 20
typedef 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;
}
}
}
快速排序 有问题
最新推荐文章于 2021-05-26 18:39:11 发布