快速排序算法
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),不稳定
以上是关于快速排序算法的主要内容,如果未能解决你的问题,请参考以下文章