标签:快速排序的随机化版本
快速排序在最坏情况下的复杂度较高,采取随机化算法选择每次的分割点,能够在一定程度上使每次划分的平衡性更好。
// // 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; }
标签:快速排序的随机化版本
原文地址:http://blog.csdn.net/fangpinlei/article/details/44277779