1177 快速排序

题目描述

利用快速排序算法将读入的N个数从小到大排序后输出。

快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)

代码:

#include<iostream>
using namespace std;
//快速排序模板 
int a[100010]; 
void qsort(int left, int right){
    if(left < right){
        int i = left, j = right;
        int key = a[left];
        while(i < j){
            while(i<j && a[j]>=key)
                j--;
            while(i<j && a[i]<=key)
                i++;
            if(i<j){
                int t = a[i];
                a[i] = a[j];
                a[j] = t;
            }
        }
        a[left] = a[i];
        a[i] = key;
        qsort(left, i-1);
        qsort(i+1, right);
    }
}
int main(){
    int i, n;
    cin>>n;
    for(i = 0; i < n; i++)
        cin>>a[i];
    qsort(0, n-1);
    for(i = 0; i < n; i++)
        cout<<a[i]<<" ";
    return 0;
} 

备注:

这道题冠冕堂皇地说考验我们写快速排序,写完标准的快排根本过不了,最后还是用sort过的。。。贴在这里的是我认真地写了一遍的快排。我发现快排有两种写法,这里是我习惯的一种,因为之前看过这种写法的图解。。注意什么时候要取等。

posted @ 2016-09-07 14:48  timeaftertime  阅读(228)  评论(0编辑  收藏  举报