宝哥软件园

PHP中基数排序实现方法详解

编辑:宝哥软件园 来源:互联网 时间:2021-09-03

本文的一个例子讲述了如何用PHP对基数进行排序。分享给大家参考,如下:

基数排序是基于关键字中每个位的值,通过多次分配和收集排序后的N个元素来实现的。

让我们通过一个具体的例子来展示基数排序是如何实现的。

初始序列为:r {50,123,543,187,49,30,0,2,11,100}。

我们知道,任何阿拉伯数字的每个数字的基数都是用0~9来表示的。

所以我们不妨把0~9看成10桶。

首先,我们根据位数对序列进行分类,并将其划分为指定的桶。例如,R[0]=50,个位数为0,这个数字存储在编号为0的桶中。

分类后,我们按照从0到9的顺序从每个桶中取出所有的数字。

此时得到的序列是一个以个位数递增的序列。

按个位数排序:{50,30,0,100,11,2,123,543,187,49}。

接下来可以按照这个方法对十位数和百位数进行排序,最后就可以得到排序后的序列。

?Php/**基数排序**//* *获取数字上的数字* *百位数=2345 00/100 */函数getn ($ num,$ n){ $ value=10;for($ I=1;$ I $ N;$ I){ $ value=$ value * 10;} $ M=(int)($ num % $ value/($ value/10));返还M美元;}/* */function paixu($ arr){ $ flag=1;//是否所有子数字都是0标志,对于($M=1)都是0标志=0;$flag!=0;$ M){ $ flag=0;if($ M ^ 1){ $ M=0;for($ j=0;$ j10$ j){ for($ k=0;$ kcount($ b[$ j]);$k ){ if($b[$j][$k]!=0)$ arr[$ m]=$ b[$ j][$ k];//依次取出容器中的数字进行下一次排序} } $ b=array();//在为$i=0向B}附加新值之前,清空数组中的原始数据;$ I count($ arr);$i ) { $thisNum=getN($arr[$i],$ M);if($thisNum!=0)$ flag=1;$ b[$ ThisNum][]=$ arr[$ I];//将数组中的数字放入容器中} } print _ r($ arr);//var _ dump($ b);}/* *基数排序* * End * */paixu(数组(65,3,45,6,7,8,31,100,1000,1234))?运行结果:

复制代码如下: array([0]=3[1]=6[2]=7[3]=8[4]=31[5]=45[6]=65[7]=100[8]=1000[9]=1234)

基数排序也可以用来查找重复项和区间等。

代码不重要(我的代码还需要改进),但思考是关键

PS:这里推荐一个排序的演示工具,供大家参考:

在线动画演示插入/选择/冒泡/合并/希尔/快速排序过程工具:http://tools.jb51.net/aideddesign/paixu_ys

更多对PHP相关内容感兴趣的读者可以查看本网站专题:《php排序算法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP常用遍历算法与技巧总结》、《PHP数学运算技巧总结》、0103010

希望本文对PHP编程有所帮助。

更多资讯
游戏推荐
更多+