int partitions(int *a,int low,int high);
void quickSort(int* a,int low,int high){
if(low<high){
int piv=partitions(a,low,high);//划分
quickSort(a,low,piv-1);
quickSort(a,piv+1,high);
}else return;
}
int partitions(int *a,int low,int high){
//一次划分
// int idx=low+rand()%(high-low+1);
// swap(&a[low],&a[idx]);
//假定每次都取a[low]进行划分
int x=a[low];
while(low<high){
while(low<high&&a[high]>=x) --high;
if(low<high){
a[low]=a[high];
// swap(&a[low],&a[high]);
//low++;
}//把比x小的数放到左边
while(low<high&&a[low]<=x) ++low;
if(low<high){
a[high]=a[low];
// swap(&a[low],&a[high]);
// high--;
}//把比x大的数放到右边
}
a[low]=x;
return low;
}
bool containsDuplicate(int* nums, int numsSize) {
quickSort(nums,0,numsSize-1);
for(int i=1;i<numsSize;i++){
if(nums[i]==nums[i-1]) return true;
}
return false;
}
为什么假定每次low位置为枢纽的快排解决会显示超出时间限制,但是使用随机枢纽就能够通过呢
