基础的手写快排模板 快速排序

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <bits/stdc++.h>
using namespace std;
using  i64 = long long ;

void Quick_Sort(i64 *arr, i64 begin, i64 end) {
    if(begin >= end) return;
    i64 tmp = arr[(begin + end) / 2];
    i64 l = begin - 1, r = end + 1;
    while (l < r) {
        do(l++); while (arr[l] < tmp);

        do(r--); while (arr[r] > tmp);
        if (l < r) swap(arr[l], arr[r]);
    }
    Quick_Sort(arr, begin, r);
    Quick_Sort(arr, r + 1, end);
}

void solve() {
    i64 n;
    cin >> n;
    vector<i64> nums(n + 1, 0);
    for(int i = 1; i <= n; i++) {
        cin >> nums[i];
    }
    Quick_Sort(nums.data(), 1, n);
    // sort(nums.begin() + 1, nums.end());
    for(int i = 1; i <= n; i++) {
        cout << nums[i] << " \n"[i == n];
    }
}

int main()
{
    solve();
    return 0;
}

可优化方向

  1. 当数组长度小于16时,使用插入排序
  2. 随机选取基准值
  3. 三路快排