码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序的随机化算法

时间:2015-03-15 16:54:45      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:快速排序的随机化版本

快速排序在最坏情况下的复杂度较高,采取随机化算法选择每次的分割点,能够在一定程度上使每次划分的平衡性更好。

//
//  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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!