> 馆藏中心

Python(递归)快速排序,如何实现每次排序随机选取基值?

来源:cnblogs 编辑:张华

/*5.快速排序思路:选2113定一个值(可随机5261,可为a[0],随机更好),将小于4102这个数的所有1653数放在它的左边,大于这个数的放在右边。*/template<typename T>void quickSort(vector<T> &a, int l, int r){ if(l<r) { int q=partition(a,l,r); quickSort(a,l,q-1); quickSort(a,q+1,r); }}template<typename T>int partition(vector<T> &a, int l, int r){ T temp=a[l],t; int i=l,j=r+1; while(true) { while( a[++i]<temp && i<=r); while( a[--j]>temp); if(i>=j) break; t=a[i]; a[i]=a[j]; a[j]=t; } a[l]=a[j]; a[j]=temp; return j;}/*5.1 快速排序--使用随机数做基数*/template<typename T>int RandPartion(vector<T> &a,int l, int r){ srand(time(0)*l*r); int i=int(random()%(l-r)+l); //cout<<a.size()<<endl; T temp =a[l]; a[l]=a[i]; a[i]=temp; return partition(a,l,r);}template<typename T>void RandQuicksort(vector<T> &a, int l, int r){ if(l<r) { int m=RandPartion(a,l,r); //cout<<"pre "<<l<<" " <<m-1<<" "<<endl; RandQuicksort(a,l,m-1); //cout<<"lat "<<m+1<<" " <<r<<" "<<endl; RandQuicksort(a,m+1,r); }}www.179s.com防采集请勿采集本网。

使用

import random

快速排序:在数组L中选一个数叫支点Pivot,把数组L中所有比支点小的数放在支点的左边;比支点大的数放在支点右边..;然后分别对左、右两个新数组重新各选一个支点,重复之前的排法,直到左、右只剩下一个数不用再分。经过这样的过程后,整个数组

导入ramdom库。

class SortMethod: ''' 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法。 插入算法把要排序的数组分成两部分: 第一

piviot = array[0]

不是的 快速排序中每次随机选取一个主元x,再进行划分 划分后左边的序列中的所有元素x (也可能取=) 但是左右两个序列中都是无序的 所以需要继续递归的做下去 以下附sort的pascal代码 procedure sort(l,r:longint); var i,j,x,y:longint; begin i

改成

piviot = array[random.randint(0,len(array)-1)]收获园豆:20https://www.cnblogs.com/pythonywy/p/11857026.html,你可以参考

1. 快速排序如果选择的基准值为最小值的话,划分的结果序列只有一个,皆位于基准值的一侧(具体哪侧需要视序列的升序或降序情况而定)。但是其特征不变,即通过该趟排序基准值在最终序列的位置即被确定。 2. 快速排序若每趟排序选取的基准值都为

非常简单,就把第2113一个if left > right 改成 left >= right就可以了。。 当5261left = right的时候也应该是4102退出的条件,1653你没有加上所以就陷入了while != j这个循环里面了。。 在这个里面 left = right =j,而i=left+1=j+1,所以i>j,而你的判断条件只有i内容来自www.179s.com请勿采集。

本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。本文《Python(递归)快速排序,如何实现每次排序随机选取基值?》转载自cnblogs,版权归原作者所有,若侵权请联系:E-MAIL:513175919@qq.com
违法违规信息请立即联系本网可获得现金奖励,TEL:1-8-2-1-0-2-3-3-3-8-1(电话仅供违法违规信息举报,侵权类信息请EMAIL。)

www.179s.com false 互联网 http://www.179s.com/jsblogcnk/po/poykdv.html report 2818 使用import random导入ramdom库。把piviot = array[0]改成piviot = array[random.randint(0,len(array)-1)]收获园豆:20https://www.cnblogs.com/pythonywy/p/11857026.html,你可以参考

热门图片

经济金融企业管理法律法规社会民生科学教育降生活体育运动文化艺术电子数码电脑网络娱乐休闲行政地区心理分析医疗卫生