C++ 排序算法

快速排序

思想:

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

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

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

步骤:

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

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

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

代码:

cpp 复制代码
#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;
}
相关推荐
深栈6 分钟前
机器学习:支持向量机
算法·机器学习·支持向量机
Mr_WangAndy8 分钟前
C++设计模式_结构型模式_外观模式Facade
c++·设计模式·外观模式
FreeBuf_15 分钟前
Happy DOM曝CVSS 9.4严重RCE漏洞,PoC已公开(CVE-2025-61927)
java·c语言·c++·python·php
刘海东刘海东16 分钟前
结构型智能科技理论研究(草稿)
科技·算法
BlackQid18 分钟前
深入理解指针Part4——字符、数组与函数指针变量
c++·后端
C嘎嘎嵌入式开发27 分钟前
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
数据结构·python·算法
熬了夜的程序员28 分钟前
【LeetCode】69. x 的平方根
开发语言·算法·leetcode·职场和发展·动态规划
Niuguangshuo36 分钟前
音频特征提取算法介绍
算法·音视频
Vect__42 分钟前
从底层到上层的“外挂”:deque、stack、queue、priority_queue 全面拆解
数据结构·c++
草莓熊Lotso1 小时前
C++ 手写 List 容器实战:从双向链表原理到完整功能落地,附源码与测试验证
开发语言·c++·链表·list