12.排序

1.排序理论

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Iw9JbiQc-1644592461318)(/Users/xuguagua/Library/Application Support/typora-user-images/image-20220112160343390.png)]

题目:215

2.八大排序算法

2.1_快速排序

2.1.1 算法描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUtrPpcG-1644592461321)(/Users/xuguagua/Library/Application Support/typora-user-images/image-20220112160524555.png)]

关键:有两个指针 i,j 。有一个 temp ,先判断 j 再判断 i ,当“满足”时,i 或 j 就移动,不满足时 i,j 交换位置

2.1.2 代码实现

class Solution {
  public:
  void quick_sort(vector<int>&nums,int left,int right){
    if(left<right){ // 结束递归的条件
      int i = left; 
      int j = right;
      int temp = nums[left];
      // 开始快速遍历
      while(i<j){
        // 先判断 j 
        while(i<j&&nums[j]>=temp) j--; // 如果 j 指向元素一直>= temp 就不交换
        if(i<j){ // 不满足上述条件了
          nums[i] = nums[j]; // 将 j 放在 i 上,j 的位置变为 x 
          i++;  // i 的 x 被占了,开始进行 i 的判断
        }
        // 然后判断 i 
        while(i<j&&nums[i]<temp) i++;
        if(i<j){
          nums[j] = nums[i]; // 将 j 放在 i 的 x 上
          j--; // j 的坑被占,继续 j 的判断
        }
      }
      nums[i] = temp; // i,j 都遍历完成后将 temp 放在 i  的位置,因为最后 i 上是挖坑了的
      // 将 temp 为分界点然后对剩余的左右量变数组进行遍历操作
      quick_sort(nums,left,i-1); // nums 左边
      quick_sort(nums,i+1,right); // nums 右边
    }
  }
  int findKthLargest(vector<int>& nums, int k) {
    // 对 nums 进行排序
    quick_sort(nums,0,nums.size()-1);
    // 取前 k 个值
    return nums[nums.size()-k];
  }
};

2.2 排序链表

LeetCode 题目链接

这个 cut 操作传入一个 cur ,每次都会传入一个 2 的倍数,就拿第一次 cut 来说。它会走两遍 next 。然后再返回 next

所以就会有下图的一个形状

image-20220121130620147

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值