常见排序算法

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);
}
相关推荐
rchmin4 分钟前
限流算法:令牌桶与漏桶详解
算法·限流
小北方城市网4 分钟前
第1课:架构设计核心认知|从0建立架构思维(架构系列入门课)
大数据·网络·数据结构·python·架构·数据库架构
leoufung11 分钟前
LeetCode 221:Maximal Square 动态规划详解
算法·leetcode·动态规划
黑符石13 分钟前
【论文研读】Madgwick 姿态滤波算法报告总结
人工智能·算法·机器学习·imu·惯性动捕·madgwick·姿态滤波
源代码•宸15 分钟前
Leetcode—39. 组合总和【中等】
经验分享·算法·leetcode·golang·sort·slices
好易学·数据结构16 分钟前
可视化图解算法77:零钱兑换(兑换零钱)
数据结构·算法·leetcode·动态规划·力扣·牛客网
AlenTech30 分钟前
226. 翻转二叉树 - 力扣(LeetCode)
算法·leetcode·职场和发展
Tisfy34 分钟前
LeetCode 1458.两个子序列的最大点积:动态规划
算法·leetcode·动态规划·题解·dp
求梦82034 分钟前
【力扣hot100题】合并区间(9)
算法·leetcode·职场和发展
独自破碎E42 分钟前
【归并】单链表的排序
数据结构·链表