快速排序

題目描述

給定你一個長度爲n的整數數列。

請你使用快速排序對這個數列按照從小到大進行排序。

並將排好序的數列按順序輸出。

輸入格式

輸入共兩行,第一行包含整數 n。
第二行包含 n 個整數(所有整數均在1~109範圍內),表示整個數列。

輸出格式

輸出共一行,包含 n 個整數,表示排好序的數列。

數據範圍

1≤n≤1000000

輸入樣例:

5
3 1 2 4 5

輸出樣例:

1 2 3 4 5

快速排序模板思想:在區間內找到一個基準,小於基準的放到左邊,大於基準的放到右邊

代碼如下:

#include<iostream>
using namespace std;
const int N = 1e6 + 10;
int a[N];
void quick_sort(int l, int r)
{
    if(l >= r)return ;
    int i = l -1, j = r + 1, x = a[l];
    while(i < j){
        while(a[++i] < x);
        while(a[--j] > x);
        if(i < j)swap(a[i], a[j]);
        else break;
    }
    quick_sort(l, j), quick_sort(j + 1, r);
}
int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i++)
        cin >> a[i];
    quick_sort(0, n - 1);
    for(int i = 0; i < n; i++)
        cout << a[i] << ' ';
    cout << endl;
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章