C++ 排序算法

devtools/2024/10/18 3:34:54/

快速排序

思想:

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

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

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

步骤:

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;
}


http://www.ppmy.cn/devtools/119162.html

相关文章

0基础跟德姆(dom)一起学AI 机器学习02-KNN算法

【理解】KNN算法思想 K-近邻算法&#xff08;K Nearest Neighbor&#xff0c;简称KNN&#xff09;。比如&#xff1a;根据你的“邻居”来推断出你的类别 KNN算法思想&#xff1a;如果一个样本在特征空间中的 k 个最相似的样本中的大多数属于某一个类别&#xff0c;则该样本也属…

从零到 Go 语言开发:你可能需要了解下 5 个关键技巧

你有没有想过,要在 Go 语言中开发一个简单的 Web 应用其实没那么难?或者说,你是不是在学习 Go 语言的时候,常常觉得各种框架和概念让人头疼?今天,我就带你一步一步看看 Go 语言 Web 开发中最核心的几个点,揭开它那看似复杂的面纱,实际操作起来,可能比你想象中简单得多…

【Webpack】使用 Webpack 和 LocalStorage 实现静态资源的离线缓存

基本流程 1&#xff09;使用 Webpack 进行资源打包&#xff1a; 安装 Webpack 及其相关插件。配置 Webpack&#xff0c;将静态资源打包到特定目录。 2&#xff09;配置 Service Worker&#xff1a; 安装 workbox-webpack-plugin 插件。配置 Service Worker&#xff0c;通过…

初识Linux · 地址空间

目录 前言&#xff1a; 代码现象 快速理解该现象 理解部分细节问题 细节1 拷贝和独立性 细节2 如何理解地址空间 细节3 为什么存在地址空间 细节4 如何进一步理解页表和写时拷贝 前言&#xff1a; 本文介绍的是有关地址空间&#xff0c;咱们的介绍的大体思路是&#x…

Python发送邮件教程:如何实现自动化发信?

Python发送邮件有哪些方法&#xff1f;如何利用python发送邮件&#xff1f; 无论是工作汇报、客户通知还是个人提醒&#xff0c;邮件都能快速传递信息。Python发送邮件的自动化功能就显得尤为重要。AokSend将详细介绍如何使用Python发送邮件&#xff0c;实现自动化发信&#x…

LeetCode: 1971. 寻找图中是否存在路径

寻找图中是否存在路径 原题 有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点…

Java中的五种I/O模型详解

一、阻塞I/O&#xff08;Blocking I/O&#xff09; 1.1 概念 阻塞I/O是最传统的I/O模型。在该模型中&#xff0c;当一个线程执行I/O操作时&#xff0c;如果没有数据可读或可写&#xff0c;线程将会被阻塞&#xff0c;直到I/O操作完成。 1.2 工作原理 当线程调用读取或写入数…

SpringBoot整合JPA 基础使用

一、什么是JPA ‌‌1.JPA的定义和基本概念‌‌ ‌JPA&#xff08;Java Persistence API&#xff09;‌是Java中用于进行持久化操作的一种规范&#xff0c;它定义了一系列用于操作关系型数据库的API接口。通过这些接口&#xff0c;开发人员可以方便地进行数据库的增删改查等操…