$qsort$

快排的基本思想: 
1.先从数列中取出一个数作为基准数。 
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 
3.再对左右区间重复第二步,直到各区间只有一个数。
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
inline ll read(){
    ll x=0,f=1; char ch=getchar();
    while(!isdigit(ch)) ch=='-'&(f=-1),ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return x*f;
}
int n;
const int N=1<<20;
int a[N];
signed main(){
    n=read();
    for(register int i=1;i<=n;i++) a[i]=read();
    sort(a+1,a+n+1);
    for(register int i=1;i<=n;i++) cout<<a[i]<<' ';
    return 0;
}
快排【滑稽】
#include <iostream>
using namespace std;
typedef long long ll;
inline ll read(){
    ll x=0,f=1; char ch=getchar();
    while(!isdigit(ch)) ch=='-'&(f=-1),ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar(); return x*f;
}
int n;
const int N=1<<20;
int a[N];
template<typename T>inline void qsort(T a[],int l,int r){
    if(l>=r) return ;
    T p=a[l];
    int i=l,j=r;
    while(i!=j){
        while(i<j and a[j]>=p) j--; swap(a[i],a[j]);
        while(i<j and a[i]<=p) i++; swap(a[i],a[j]);
    }
    qsort(a,l,i-1); qsort(a,i+1,r);
}
signed main(){
    n=read();
    for(register int i=1;i<=n;i++) a[i]=read();
    qsort(a,1,n);
    for(register int i=1;i<=n;i++) cout<<a[i]<<' ';
    return 0;
}

 

posted @ 2019-02-02 20:19  Isaunoya  阅读(132)  评论(0编辑  收藏  举报
TOP