快速排序

題目描述

利用快速排序算法將讀入的N個數從小到大排序後輸出。

快速排序是信息學競賽的必備算法之一。對於快速排序不是很瞭解的同學可以自行上網查詢相關資料,掌握後獨立完成。(C++選手請不要試圖使用STL,雖然你可以使用sort一遍過,但是你並沒有掌握快速排序算法的精髓。)

輸入輸出格式

輸入格式:

輸入文件sort.in的第1行爲一個正整數N,第2行包含N個空格隔開的正整數a[i],爲你需要進行排序的數,數據保證了A[i]不超過1000000000。

輸出格式:

輸出文件sort.out將給定的N個數從小到大輸出,數之間空格隔開,行末換行且無空格。

輸入輸出樣例

輸入樣例#1: 
5
4 2 4 5 1
輸出樣例#1: 
1 2 4 4 5

說明

對於20%的數據,有N≤1000;

對於100%的數據,有N≤100000。


手寫快排。。TLE了好幾次。。真是時間限制嚴格。。

#include <iostream>
#include <cstring>
using namespace std;
void quick_sort(int *a,int left,int right)
{
    if(left>=right)return;
    swap(a[left],a[(left+right)/2]);
    int i=left,j=right,key=a[left];
    while(i<j)
    {
        while(i<j&&key<a[j])j--;
        if(i<j)a[i++]=a[j];
        while(i<j&&key>a[i])i++;
        if(i<j)a[j--]=a[i];
    }
    a[i]=key;
    quick_sort(a,left,i-1);
    quick_sort(a,i+1,right);
}
int main()
{
    int N,a[100020];
    cin>>N;
    for(int i=0;i<N;i++)
        cin>>a[i];
    quick_sort(a,0,N-1);
    for(int i=0;i<N;i++)
    {
        if(!i)cout<<a[i];
        else cout<<' '<<a[i];
    }
    cout<<endl;
    return 0;
}
發佈了28 篇原創文章 · 獲贊 17 · 訪問量 6022
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章