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

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


http://www.kler.cn/news/321293.html

相关文章:

  • 基于51单片机的方向盘模拟系统
  • OJ在线评测系统 后端 使用代理模式编写测试类 并 实现核心业务判题流程
  • 开源治理聚光灯 | 企业规模不同,治理方式各显神通
  • 【openwrt-21.02】VPN Passthrough系列之L2TP Passthrough实现
  • 谷神后端$vs.dbTools.list
  • Windows安装Vim,并在PowerShell中直接使用vim
  • 【裸机装机系列】16.kali(ubuntu)-安装linux和win双系统-重装win11步骤
  • React Native中如何调用iOS的Face ID和Android的生物识别,react-native-biometrics
  • 【深度学习】04-Cnn卷积神经网络-01- 卷积神经网络概述/卷积层/池化层/分类案例精讲
  • 【MySQL】数据库--索引
  • 未来数字世界相关技术、应用:AR/VR/MR;数字人、元宇宙、全息显示
  • 开源链动 2+1 模式 S2B2C 商城小程序:激活 KOC,开启商业新征程
  • 将Mixamo的模型和动画导入UE5
  • C--结构体和位段的使用方法
  • 一道涉及 Go 中的并发安全和数据竞态(Race Condition)控制的难题
  • 碎纸片的自动拼接复原技术
  • tcp、udp通信调试工具Socket Tool
  • 协议IP规定,576字节和1500字节的区别
  • MySQL关卡任务书
  • 单样本Cellchat(V2)细胞通讯分析学习和整理
  • 2.2 HuggingFists中的编程语言
  • [NewStarCTF 2023 公开赛道]Begin of PHP1
  • Qt | Linux+QFileSystemWatcher文件夹和文件监视(例如监视U盘挂载目录)
  • 计算机毕业设计之:云中e百货微信小程序设计与实现(源码+文档+定制)
  • 力扣9.25
  • 微信小程序开发第五课
  • LSI SAS 9361-8i和SAS3008 12 gb / s PCIe 3.0 RAID 阵列卡配置
  • Codeforces Round 592 (Div. 2) C题 The Football Season(Exgcd)
  • AI大模型横评-9月Update(O1,Grok2,Qwen,Step-2)
  • 计算机毕业设计 基于Python的医疗预约与诊断系统 Django+Vue 前后端分离 附源码 讲解 文档