1. 程式人生 > 實用技巧 >【手撕】快速排序

【手撕】快速排序

#include<iostream>
#include<vector>
using namespace std;

void quick_sort(vector<int>& data, int left, int right)
{
    if (left >= right)
    {
        return;
    }
    // 否則就開始在原陣列上選區基準值進行交換
    int key = data[right]; // 選區最後一個數
    int i = left - 1;
    for (int j = left; j < right; j++)
    {
        
if (data[j] <= key) { i++; swap(data[i], data[j]); } } // 將基準值放到i+1的位置 swap(data[i + 1], data[right]); // i+1就是分界點 int index = i + 1; quick_sort(data, left, index - 1); quick_sort(data, index + 1, right); } int main() { vector<int
> data; // 輸入要排序的數列 int n, d; cin >> n; // 輸入數列大小 while (n-- && cin >> d) // 迴圈輸入 { data.push_back(d); } int left = 0; int right = data.size() - 1; quick_sort(data, left, right); for (int i = 0; i <= right; i++) { cout << data[i] << '
'; } cout << endl; return 0; }