上一节优化解决了数据有序的情况下,快速排序退化成冒泡排序的问题,但仍然不能解决所有数据都一样大的情况下算法退化的问题。其实这个问题很容易解决,我们只需要让虫虫和东东轮流移动即可,这样还能确保两个小朋友每次都在数组中间相遇,使数组分成均匀的两段。
那么,怎样才能让两个小朋友轮流移动呢?很简单,设定一个变量flag,flag == 0时,让东东先动,flag == 1时,让虫虫先动就可以啦。这个思想很简单,但实现起来需要一点点技巧。下面是代码:
void quickSort(int arr[], int low, int high)
{
if(low > high) //递归的出口
{
return;
}
//用随机位置的一个元素作为基准
int randomIndex = rand()%(high - low + 1) + low;
swap(low, randomIndex);