void quicksort(vector<int> & nums, int start, int end){
if(start > end){
return;
}
int pivot = nums[end];
int left = start;
int right = end - 1;
int exchange_num;
// 目标是将左侧大于锚点的数值和右侧小于锚点的数值进行交换
while(left <= right){
while(left <= right && pivot > nums[left]){
left += 1;
}
while(left <= right && pivot < nums[right]){
right -= 1;
}
if(left >= right){
break;
}
exchange_num = nums[left];
nums[left] = nums[right];
nums[right] = exchange_num;
for(int i=0; i<nums.size(); i++){
printf("%d\t", nums[i]);
}
printf("\n");
}
exchange_num = nums[end];
nums[end] = nums[left];
nums[left] = exchange_num;
for(int i=0; i<nums.size(); i++){
printf("%d\t", nums[i]);
}
printf("\n");
// 经过了上面的处理以后,当前的数组(即起始点为start,结束点为end)已经变成以pivot为中心,左边的数全部小于
//pivot,右边的数全部大于pivot,但是左右两边还不是有序的,所以需要继续递归地进行排序
quicksort(nums, start, left - 1);
quicksort(nums, left + 1, end);
}
快速排序
最新推荐文章于 2020-12-06 13:59:45 发布