对快排的优化:
我们知道在一个有序序列中,快速排序效率极低,针对这个问题进行优化。我们可以在确定轴之前,将轴元素与中间元素互换,这样可以大大改善快排在有序序列中的性能
直接甩代码
void swap(int *a,int *b)//交换函数
{
int temp=*a;
*a=*b;
*b=temp;
}
int partition(int *nums,int left,int right){
swap(&nums[left],&nums[(left+right)>>1]);//只在这里做了手脚
int temp = nums[left];
while(left<right){
while(left<right&&nums[right]>=temp) right--;
nums[left] = nums[right];
while(left<right&&nums[left]<=temp) left++;
nums[right] = nums[left];
}
nums[left] = temp;
return left;
}
void Quicksort(int *nums,int left,int right){
if(left<right){
int pivot = partition(nums,left,right);
Quicksort(nums,left,pivot-1);
Quicksort(nums,pivot+1,right);
}
}
测试样例 (要求20ms):数据放在文章里崩了,放在附件里了
已经AC过了: