当前位置: 首页 > news >正文

C++ 排序算法

快速排序

思想:

分而治之,或者说递归,即大问题拆解成类似的小问题,把所有的小问题解决,就解决了大问题;

应用在快排(默认从小到大排序)上,就是取一基准点,遍历数组,将比基准点大的放在基准点右边,比基准点小的放在基准点左边;

然后再以同样的思路,在基准点左边序列中,重新取一基准点,重复上述流程,直到只需要比较一个元素和基准点的大小,即为有序

步骤:

1. 取基准点,一般取区间的第一个元素,然后分区,左区(比基准点小)+基准点+右区(比基准点大);

2. 分区步骤:选取基准点和前后指针后,遍历区间,先从右往左,找到第一个比基准点小的元素, 左指针=右指针的值;然后从左往右,找到第一个比基准点大的元素,右指针=左指针的值,重复直到两指针相遇,相遇点=基准点的值;

3. 分区后的左区和右区重复第一步,递归的结束标志为左右区间相等;

代码:

#include <iostream>
#include <vector>
using namespace std;int partition(vector<int>& arr, int low, int high) {int pivot = arr[low];while (low < high) {while (low < high && arr[high] >= pivot) {high--;}arr[low] = arr[high];while (low < high && arr[low] <= pivot) {low++;}arr[high] = arr[low];}arr[low] = pivot;return low;
}void quickSort(vector<int>& arr, int low, int high) {if (low < high) {int pos = partition(arr, low, high);quickSort(arr, low, pos-1);quickSort(arr, pos+1, high);}
}int main() {vector<int> arr = {5,3,2,1,6,8,9};quickSort(arr, 0, arr.size()-1);for (const int & a : arr) {cout << a << endl;}return 0;
}

相关文章:

  • 自适应查询优化(Adaptive Query Optimization, AQO)技术简介
  • react crash course 2024(5) useState钩子
  • DPDK 简易应用开发之路 2:UDP数据包发送及实现
  • 记录打鼾软件
  • 2024最新版 Tuxera NTFS for Mac 2023绿色版图文安装教程
  • 基于单片机的智能温控风扇系统的设计
  • llamafactory0.9.0微调qwen2.5
  • 深度学习驱动智能超材料设计与应用
  • 云服务器连接不上是什么原因引起的?
  • spark 大表与大表join时的Shuffle机制和过程
  • 【视频讲解】非参数重采样bootstrap逻辑回归Logistic应用及模型差异Python实现
  • 【STM32】 TCP/IP通信协议(1)
  • Ubuntu24.04中安装Electron
  • 【好书推荐】掌握金仓数据库,从这些必读书籍开始! 亲爱的小伙伴们,今天我要给大家安利几本学习金仓
  • 用Python提取PowerPoint演示文稿中的音频和视频
  • .pyc 想到的一些问题
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 230. Kth Smallest Element in a BST
  • 30秒的PHP代码片段(1)数组 - Array
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Angular 响应式表单 基础例子
  • angular2 简述
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • github指令
  • GitUp, 你不可错过的秀外慧中的git工具
  • Java小白进阶笔记(3)-初级面向对象
  • JSONP原理
  • leetcode-27. Remove Element
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • Linux快速复制或删除大量小文件
  • MD5加密原理解析及OC版原理实现
  • Node 版本管理
  • PHP变量
  • Redis字符串类型内部编码剖析
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Zepto.js源码学习之二
  • 基于组件的设计工作流与界面抽象
  • 判断客户端类型,Android,iOS,PC
  • 前端js -- this指向总结。
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 详解NodeJs流之一
  • 阿里云ACE认证学习知识点梳理
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​​​​​​​​​​​​​​Γ函数
  • # Kafka_深入探秘者(2):kafka 生产者
  • #pragma multi_compile #pragma shader_feature
  • #WEB前端(HTML属性)
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)Nginx简介和安装教程
  • (C语言)字符分类函数
  • (TOJ2804)Even? Odd?
  • (八)Spring源码解析:Spring MVC
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换