#include <iostream>
#include <windows.h>
using namespace std;
void quicksort(int a[],int low,int high,int i1,char c)
{
if(low>=high)
return;
int i=low;
int j=high;
int key=a[i];
while(i<j)
{
while(i<j&&a[j]>=key)
--j;
a[i]=a[j];
while(i<j&&a[i]<=key)
++i;
a[j]=a[i];
}
a[i]=key;
if(i1==1)
{
cout<<"第1次排序的结果:"<<endl;
for(int w=low;w<=high;w++)
cout<<a[w]<<" ";
}
else
{
if(c=='l')
{
cout<<"第"<<i1<<"次排序的结果(左递归):"<<endl;
for(int w=low;w<=high;w++)
cout<<a[w]<<" ";
}
else
{
cout<<"第"<<i1<<"次排序的结果(右递归):"<<endl;
for(int w=low;w<=high;w++)
cout<<a[w]<<" ";
}
}
cout<<endl;
quicksort(a,low,i-1,++i1,'l');
cout<<endl;
quicksort(a,i+1,high,i1,'r');
cout<<endl;
}
int main()
{
int a[20],n;
cout<<"请输入要排序的个数:"<<endl;
cin>>n;
cout<<"请输入要排序的"<<n<<"个数字:"<<endl;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
quicksort(a,0,n-1,1,'l');
cout<<"最终排序后的数字为:"<<endl;
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
system("pause");
return 0;
}
随机排序其实可以先将被选中的那个元素和最左边的元素进行调换,然后再按照一般的快排来进行,因为大体思想差不多,这里就不进行累赘了。
值得注意的是我这里选取的基准元素是最左节点,但选取最右节点时循环的思想是有些差距的。。。