0
点赞
收藏
分享

微信扫一扫

12.排序

最不爱吃鱼 2022-02-12 阅读 46

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 条评论