随机快速排序法
2015-12-09 10:29
344 查看
在上次博客中,写到了快速排序法,但是该算法有一个缺陷,那就是始终以最后一个元素值作为主元,不能得到很好的平衡性能,在随机快速排序法中,可以将数组中任意一个元素作为主元,这样就能很好的达到期望值为O(nlgn)。其原理:在数组下标中生成一个随机数,将此随机下标中元素的值与数组中最后一个元素的值进行交换,然后再利用最后一个元素当作主元进行分区。分区过后,再用快速排序去调用此随机算法分区,用分治法实现。代码如下:
int Insert::RandomPartition(vector<int> &coll,int p,int total)//total是下标 { int random=0; srand((unsigned)time(NULL)); if(p+total-1<=0) { random=0; } else { random=p+rand()%(total-p);//产生随机数 } int temp=coll[random]; coll[random]=coll[total]; coll[total]=temp; temp=Partition(coll,p,total); return temp; } void Insert::RandomQuickSort(vector<int> &coll,int p,int total) { if(p<total) { int q=RandomPartition(coll,p,total); RandomQuickSort(coll,p,q-1); RandomQuickSort(coll,q+1,total); } }
相关文章推荐
- 如何写出高质量、高性能的MySQL查询
- spark MapOutputTrackerMaster
- 【html】【7】基础布局初探
- 黑马程序员—java基础复习—多态和内部类
- web前端开发工程师需要面对的事
- Android:初识异步任务AsyncTask
- Android Camera 使用详解
- Unix Network Programming(15)---并发服务器
- 如何设置一个严格30分钟过期的Session---解决方案
- JQuery实现页面Loading效果
- hdu 3572 Escape 网络流
- 夺命雷公狗---javascript NO:33 类的继承(完结)
- 《需求工程-软件建模与分析之读书笔记之一》
- Excel粘贴到textarea换行符替换
- 28家中国域名商保有量统计:中国数据跌至第11名
- 微信支付接口怎么申请 微信支付接口申请教程
- reactjs新手篇this.props
- 10010---Angular JS 表格
- Mantis 缺陷管理系统
- 每天一个Linux命令(4):mkdir命令