提要:
快速排序是基于分治的思想实现的排序算法,对于一个无序数列,我们从中选取一个基数,然后把小于基数的所有数字放到基数前面,大于基数的数字放在基数后面,然后对基数左右的子序列进行同样的操作,最终获得有序数列。
代码:
#include<iostream>
using namespace std;
void sort(int a[],int l, int r){
if (l>=r) return;
int i=l;
int j=r;
srand(time(0));
int k=rand()%(j-i+1)+i; //取[l,r]的随机数
int key=a[k]; //基数
a[k]=a[l]; //腾出a[l]这个位置用于交换
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; //最终i==j 且这就是key的最终位置
sort(a,l,i-1);
sort(a,i+1,r);
}
int main(){
int a[]={6,1,2,4,5,8,7,3,5,0,5,10,55};
int n=13;
for (int i=0; i<n; i++) cout<<a[i]<<" "; cout<<endl;
sort(a,0,n-1);
for (int i=0; i<n; i++) cout<<a[i]<<" "; cout