1.快速排序
快速排序使用分治方法,比基准值小的数字放到基准值左面,比基准值大的放到基准值右面;然后分别对基准值左侧、右侧分别使用快速排序;基准值可以随意选择,一般选择第一个或者最后一个数字
- 选择基准值
- 比基准值小的放到左边,比基准值大的放到右边
- 基准值放到空出的位置
- 分别对左边和右边使用快速排序
cpp
int quick_sort2(vector<int>& nums, int start, int end) {
if (start >= end) return 0;
int left = start, right = end;
int tmp = nums[start];
while(left < right) {
while (left < right && nums[right] >= tmp) {//寻找小于base的位置
right--;
}
if (right > left) {
nums[left] = nums[right];
left++;
}
while (left < right && nums[left] <= tmp) {//寻找大于base的位置
left++;
}
if (left < right) {
nums[right] = nums[left];
}
}
nums[left] = tmp;
quick_sort2(nums, 0, left - 1);
quick_sort2(nums, left + 1 ,end);
return left;
}
void quick_sort(vector<int>& nums) {
quick_sort2(nums, 0, nums.size() - 1);
}