#include<iostream>
using namespace std;
int a[200001],n;
void swap(int &a,int &b){
int tmp = a;
a = b;
b = tmp;
}
//int partition(int p,int r){
//int rnd = rand()%(r-p+1)+p;
//swap(a[rnd],a[r]);
//int pvt = r, i = p-1;
//for(int j = i+1;j<r;j++)
//if(a[j]<a[pvt])
//swap(a[j],a[++i]);
//swap(a[++i],a[pvt]);
//return i;
//}
int partition(int l,int r)
{
int i=l,j=r; //初始化
while(i<j)
{
while(i<j&&a[i]<a[j]) j--; //右侧扫描
if(i<j)
{
swap(a[i],a[j]);//将较小记录交换到前面
i++;
}
while(i<j&&a[i]<a[j]) i++;//左侧扫描
if(i<j)
{
swap(a[j],a[i]);//将较大记录交换到后面
j--;
}
}
return i; // i位轴值记录的最终位置
}
void qsort(int p,int r){
if(p<r){
int q = partition(p,r);
qsort(p,q-1);
qsort(q+1,r);
}
}
int main(){
cout<<"请输入数组的大小:"<<endl;
cin>>n;
cout<<"请输入数组值:"<<endl;
for(int i=0;i<n;i++)
cin>>a[i];
qsort(0,n-1);
cout<<"快速排序后的结果是:"<<endl;
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
return 0;
}
快速排序源代码
最新推荐文章于 2020-04-23 19:22:49 发布