利用分而治之的思想,思路是在数组中随机产生一个下标,把它代表的值当做主元。
//随机快速排序
#include<bits/stdc++.h>
using namespace std;
const int N = 210;
int a[N];
int Par(int p,int r)//分组
{
int x=a[r], i=p-1;
for(int j=p;j<=r-1;j++)
{
if(a[j]<=x){
swap(a[i+1], a[j]); i=i+1;
}
}
swap(a[i+1], a[r]);
return (i+1);
}
int Partition(int p, int r)//p,r起始位置,终止位置
{
int s = rand() % (r-p+1)+ p, k,q; //生成p~r之间一个随机数
swap(a[s], a[r]);
q = Par(p,r);
return q; //主元
}
void QuickSort(int p,int r)
{
int q;
if(p<r)
{
q = Partition(p,r);
QuickSort(p,q-1);
QuickSort(q+1,r);
}
}
main()
{
int n;
cout<<"输入数组个数:";
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
QuickSort(1,n);
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}
- 运行结果:
输入数组个数:4
3 2 1 5
1 2 3 5
--------------------------------
Process exited after 8.344 seconds with return value 0
请按任意键继续. . .