首页 > 编程知识 正文

基数排序的原理,基数排序排序基数为3

时间:2023-05-06 00:46:30 阅读:63556 作者:552

基数排序

分为两大类。

第一类:最下位优先法,简称LSD法:先从最低位排序,再从最低位排序,从最高位排序到得到有序序列; 该过程如下图所示。

初始数组序列为15、25、105、78、34、21、32和41,以一位大小顺序桶入。

依次倒入桶中数量,对同一桶中的数量按先进先出顺序倒出,结果以21、41、32、34、15、25、105、78再10位的大小依次倒入桶中;

将桶中的数量按顺序倒出,结果从105、15、21、25、32、34、41、78、百位上开始按计数的大小依次放入桶中,没有百位的数以百位为0放入桶中;

从桶里数的结果是15、21、25、32、34、41、78、105

Java实现代码如下:

publicvoidradixsort(int[]a,int n ) ) {int max=A[0]; for(intI=1; i n; I () if ) max=A[i] ) max=A[i]; }doubled=math.pow(10,string.valueof ) max ).length ); int k=1; int[][] t=new int[10][n]; //桶int[] num=new int[n];//记录每桶收款数的个数while(kd ) for(inta:a ) intm=(a/k ) % 10; t[m][num[m]]=a; num[m]; (}int c=0; for(intI=0; i n; I(if ) num[I]!=0) for(intj=0; j num[i]; j () {A[c ]=t[i][j]; }}num[i]=0; (}k=k * 10; }

第二类:最高位优先法,简称MSD法:先从最高位排序,每组再从最高位排序,循环至最低位。

序列:以15、25、105、78、34、21、32、41为例,从最高一百位开始依次进入桶中,只有105位有百位,其他百位按0计算; 检测每个水桶的数据。 桶中的要素个数多于1个时,将该桶递归地进行下一位的分组。

Java代码实现:

publicclassmsdsort { public int [ ] sort (int [ ] a,int n ) ) {int max=A[0]; for(intI=1; i n; I () if ) max=A[i] ) max=A[i]; }intmaxl=string.valueof(max ).length ); //数组中的最长元素长度intk=newdouble(math.pow ) 10,maxL - 1 ) ).intValue ); int[][] t=new int[10][n]; //桶int[] num=new int[n]; //记录每桶收款数的个数for(inta:a )//最高位且每桶intm=) a/k ) % 10; t[m][num[m]]=a; num[m]; (}int c=0; for(intI=0; i n; I () if ) num[I]==1) ) /如果桶中只有一个数,则A[c ]=t[i][0]; }elseif(num[I]1) ) /如果桶中有多个数字,则数组b的递归int () b=newint(num ) I ); for(intj=0; j num[i]; j () {B[j]=t[i][j]; sort(b,num[i]; //递归方法} }返回a; } publicstaticvoidmain (string [ ] args ) {RadixSort r=new RadixSort ); int [ ] a={ 12,1,23,123,34 }; r.sort(a,A.length ); for(inta:a ) system.out.println ) a; } }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。