1、划分函数:
int partition(int a[],int left,int right)
{
int temp=a[left];
while(left<right)
{
while(a[right]>temp&&left<right) right--; //别忘了外层while循环条件的限制
a[left]=a[right];
while(a[left]<=temp&&left<right) left++; //别忘了相等情况的判断!
a[right]=a[left];
}
a[left]=temp;
return left;
}
2、快排:
void quickSort(int a[],int left,int right)
{
if(left<right)
{
int pos=partition(a,left,right);
quickSort(a,left,pos-1);
quickSort(a,pos+1,right);
}
}
3、随机划分:
int randPartition(int a[],int left,int right)
{
int p=(int)round(1.0*rand()/RAND_MAX*(right-left)+right);
swap(a[left],a[p]);
int temp=a[left];
while(left<right)
{
while(a[right]>temp&&left<right) right--;
a[left]=a[right];
while(a[left]<temp&&left<right) left++;
a[right]=a[left];
}
a[left]=temp;
return left;
}