1.快速排序,0,1,2..n-1, 选出枢纽元index,交换a[index]与a[n-1],将小于a[n-1]的元素放在左边,大于的元素放在右边,递归分别对两组进行排序
#include<iostream>
using namespace std;
#include<time.h>
int RandomInRange(int left,int right)
{
if(right>left)
{
srand(time(NULL));
return left+rand()%(right-left);//产生start~end之间的随机数
}
}
int partion(int *a,int left,int right)
{
if(a==NULL || left<0 || right<left)
throw new exception("invalid parameters");
int index = RandomInRange(left,right);
swap(a[index],a[right]);
int i=left-1;
for(int j=left;j<right;j++)
{
if(a[j]<a[right])
{
i++;
if(i!=j)
swap(a[i],a[j]);
}
}
++i;
swap(a[i],a[right]);
return i;
}
void quickSort(int *a,int left,int right)
{
if(left == right)
return ;
int index= partion(a,left,right);
if(index>left)
quickSort(a,left,index-1);
if(index<right)
quickSort(a,index+1,right);
}
int main()
{
int a[]={2,8,7,1,3,5,6,4};
int length=sizeof(a)/sizeof(int);
quickSort(a,0,length-1);
for(int i=0;i<length;i++)
cout<<a[i]<<" ";
}