【数据结构与算法】排序算法之快速排序(简)

server/2024/9/23 0:55:31/

快速排序

文章目录

  • 快速排序
    • 基础快速排序
      • 练习:[215. 数组中的第K个最大元素](https://leetcode.cn/problems/kth-largest-element-in-an-array/)

基础快速排序

快速排序基于分治法,我们选定一个元素为枢轴(pivot,通常第一轮选择首元素为枢轴),从两端开始比较,设左端为low,右端为high。

在每轮遍历前,我们把枢纽放到当前区间最后一位,然后从倒数第二位置作为右端

  • nums[low] < pivot, low++ (low不能超过最后一位)
  • nums[high] > pivot, high–(high不能小于0)
  • 找到第一个不小于枢纽,和第一个不大于枢纽的值,若两值位置

注意事项:

  • 注意边界问题
  • 每轮枢纽尽量随机选择,可以提高效率(尤其是针对已经有一定序的对象)

练习:215. 数组中的第K个最大元素

class Solution {
public:int findKthLargest(vector<int>& nums, int k){if (nums.size() == 1)return nums[0];// 第k位正确的位置int target = nums.size() - k;int answer = kTh(nums, 0, nums.size() - 1, target);return answer;}int kTh(vector<int>& nums, int low, int high, int target){// 代表只有一个了if (low == high) {return nums[low];}int pivot = nums[low], l = low - 1, r = high;// 把枢纽存储到最后一个位置去std::swap(nums[low], nums[high]);while (l < r) {do l++;while (l < high && nums[l] < pivot);do r--;while (r >= 0 && nums[r] > pivot);if (l < r)std::swap(nums[l], nums[r]);}std::swap(nums[l], nums[high]);if (l == target)return nums[l];else if (l > target) {return kTh(nums, low, l - 1, target);}else {return kTh(nums, l + 1, high, target);}}
};{return kTh(nums, l + 1, high, target);}}
};

http://www.ppmy.cn/server/119067.html

相关文章

linux系统架构

1、linux分arm和x86吗 分 ‌**Linux操作系统分为ARM和x86版本。**‌ Linux系统可以根据不同的硬件架构进行编译和运行&#xff0c;这意味着可以在ARM和x86架构的计算机上运行Linux系统。‌12 ARM和x86版本的主要区别在于它们使用的指令集不同。ARM使用的是精简指令集&#x…

Kubernetes 监控与日志管理

Kubernetes 监控与日志管理详解 Kubernetes 是目前广泛使用的容器编排平台&#xff0c;在生产环境中对其进行有效的监控和日志管理是确保应用程序稳定运行的关键。由于 Kubernetes 的分布式架构&#xff0c;监控和日志管理的复杂性增加。 一、Kubernetes 监控的基本原理 在 …

【AI学习笔记】初学机器学习西瓜书概要记录(一)机器学习基础知识篇

初学机器学习西瓜书的概要记录&#xff08;一&#xff09;机器学习基础知识篇(已完结) 初学机器学习西瓜书的概要记录&#xff08;二&#xff09;常用的机器学习方法篇(持续更新) 初学机器学习西瓜书的概要记录&#xff08;三&#xff09;进阶知识篇(待更) 文字公式撰写不易&am…

Leetcode 118.杨辉三角

给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]示例 2: 输入: numRows 1 输出: [[1]]提示: 1 <…

认识数学建模,什么是数学建模

目录 一、什么是数学建模?二、数学建模的核心思想三、数学建模的应用领域四、数学建模的基本步骤五、常用的数学建模方法和工具六、数学建模的挑战与未来发展一、什么是数学建模? 数学建模(Mathematical Modeling)是一种利用数学语言、结构和方法,对实际问题进行描述、简化…

828华为云征文 | 云服务器Flexus X实例:多智能体对话框架 AutoGen 部署和实例运行

目录 一、什么是多智能体&#xff1f; 二、什么是 AutoGen&#xff1f; 三、部署 AutoGen 3.1 更新 apt 软件源 3.2 安装 python 3.10 3.3 安装 AutoGen 3.4 安装 AutoGen Studio 四、运行 AutoGen Studio 五、实例展示 5.1 构建实例 5.2 运行 六、总结 在体验了华为…

如何训练机器学习力场

机器学习力场&#xff08;MLFF&#xff09;的训练主要依赖于通过量子力学计算生成的高质量训练数据集&#xff0c;并利用不同的机器学习算法来拟合分子系统中的势能面&#xff08;Potential Energy Surface, PES&#xff09;和原子间作用力。这种训练过程包括数据准备、特征提取…

《深度学习》PyTorch 常用损失函数原理、用法解析

目录 一、常用损失函数 1、CrossEntropyLoss&#xff08;交叉熵损失&#xff09; 1&#xff09;原理 2&#xff09;流程 3&#xff09;用法示例 2、L1Loss&#xff08;L1损失/平均绝对误差&#xff09; 1&#xff09;原理 2&#xff09;用法示例 3、NLLLoss&#xff08;负对…