快速排序算法

Posted 每天告诉自己要努力

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法相关的知识,希望对你有一定的参考价值。

快排的思想是基于分治的,就是把问题切分再分别进行处理。

①随机选择一个分界点,常用的是中点,假设中点的值为midVal
②在数组的左边界和有边界,分别用一个指针开始往中间扫描,当遇到不合条件的时候就停下来,等到双方都停下来之后再互相交换。
left指针遇到比midVal大的值时会停下来,否则继续扫描。
right指针遇到比midVal小的值是会停下来,否则继续往中间靠拢。
当left和right都停下来时,交换。
即把小于等于midVal的放在左边,大于等于midVal的放右边
③递归处理

#include <bits/stdc++.h>
using namespace std;

void quick_sort(vector<int> &vec, int l, int r) 
    if (l >= r) return;
    int mid = (l + r) >> 1;
    int midVal = vec[mid];
    int i = l - 1, j = r + 1;
    while (i < j) 
        do i++; while (vec[i] < midVal);
        do j--; while (vec[j] > midVal);
        if (i < j) swap(vec[i], vec[j]);
    
    quick_sort(vec, l, j);
    quick_sort(vec, j + 1, r);


int main() 
    int n;
    cin >> n;
    vector<int> vec(n);
    for (int i = 0; i < n; i++) cin >> vec[i];
    
    quick_sort(vec, 0, n - 1);
    
    for (auto x : vec) cout << x << " ";
    
    cout << endl;
    
    return 0;

时间复杂度是O(n²),平均的复杂度是O(nlogn)
空间复杂度是O(logn),不稳定

以上是关于快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章

一行Python代码搞定快速排序算法

排序算法 | 快速排序(含C++/Python代码实现)

交换排序(冒泡排序快速排序的算法思想及代码实现)

快速排序/快速选择算法

快速排序算法详解及代码实现

排序算法——快速排序的图解代码实现以及时间复杂度分析