常见排序算法

1.快速排序

快速排序使用分治方法,比基准值小的数字放到基准值左面,比基准值大的放到基准值右面;然后分别对基准值左侧、右侧分别使用快速排序;基准值可以随意选择,一般选择第一个或者最后一个数字

  1. 选择基准值
  2. 比基准值小的放到左边,比基准值大的放到右边
  3. 基准值放到空出的位置
  4. 分别对左边和右边使用快速排序
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);
}
相关推荐
0 0 02 小时前
CCF-CSP 39-2 水印检查(watermark)【C++】
c++·算法
plus4s3 小时前
2月15日(78,80,81题)
c++·算法·图论
能源系统预测和优化研究3 小时前
【原创改进代码】考虑碳交易与电网交互波动惩罚的共享储能电站优化配置与调度模型
算法·能源
935963 小时前
机考27 翻译21 单词14
c语言·数据结构·算法
回敲代码的猴子5 小时前
2月14日打卡
算法
blackicexs5 小时前
第四周第七天
算法
期末考复习中,蓝桥杯都没时间学了6 小时前
力扣刷题19
算法·leetcode·职场和发展
Renhao-Wan6 小时前
Java 算法实践(四):链表核心题型
java·数据结构·算法·链表
zmzb01037 小时前
C++课后习题训练记录Day105
开发语言·c++·算法
好学且牛逼的马7 小时前
【Hot100|25-LeetCode 142. 环形链表 II - 完整解法详解】
算法·leetcode·链表