快速排序在最坏情况下的复杂度较高,采取随机化算法选择每次的分割点,能够在一定程度上使每次划分的平衡性更好。
//
// main.cpp
// eoj1807
//
// Created by Fangpin on 15/3/15.
// Copyright (c) 2015年 FangPin. All rights reserved.
//
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <ctime>
using namespace std;
int a[20005];
void quick_sort(int l,int r){
if(l>=r) return ;
int x=rand()%(r-l+1)+l;//随机选取划分参考点
swap(a[r],a[x]);
int i=l-1;
for(int j=l;j<=r-1;++j){
if(a[j]<=a[r]){
++i;
swap(a[i],a[j]);
}
}
swap(a[i+1],a[r]);
quick_sort(l,i);
quick_sort(i+2,r);
}
int main(int argc, const char * argv[]) {
// insert code here...
srand((int)time(NULL));
int n;
scanf("%d",&n);
for(int i=0;i<n;++i)
scanf("%d",&a[i]);
quick_sort(0,n-1);
for(int i=0;i<n;++i){
if(i!=n-1) printf("%d ",a[i]);
else printf("%d\n",a[i]);
}
return 0;
}