PHP语言如何实现基数排序
小标 2018-08-02 来源 : 阅读 852 评论 0

摘要:本文主要向大家介绍了PHP语言如何实现基数排序,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文主要向大家介绍了PHP语言如何实现基数排序,通过具体的内容向大家展示,希望对大家学习php语言有所帮助。

本文实例讲述了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}。

接下来,可以对十位数、百位数也按照这种方法进行排序,最后就能得到排序完成的序列。

   

/**基数排序**/

 

/*

 

* 获取第几位上的数字

 

*

 

*百位数 = 2345%1000/100

 

*/

 

function getN($num,$N){

 

$value = 10;

 

for($i=1;$i<$N;$i++){

 

$value = $value * 10;

 

}

 

$M = (int)(($num % $value /($value/10)));

 

return $M;

 

}

 

/*

 

*/

 

function paixu($arr)

 

{

 

$flag = 1;//该次位数上是否全为0标志位,全为0 flag=0

 

for($M=1;$flag!=0;$M++)

 

{

 

$flag = 0;

 

if($M > 1){

 

$m = 0;

 

for($j=0;$j<10;$j++){

 

for($k=0;$k

 

if($b[$j][$k]!=0)

 

$arr[$m++] = $b[$j][$k];//将容器中的数按序取出,进行下一次排序

 

}

 

}

 

$b = array();//再给b附新值前要清空数组中原有的数据

 

}

 

for($i=0;$i

 

{

 

$thisNum = getN($arr[$i],$M);

 

if($thisNum!=0) $flag = 1;

 

$b[$thisNum][] = $arr[$i];//将数组中的数放入容器中

 

}

 

}

 

print_r($arr);

 

//var_dump($b);

 

}

 

/**基数排序**结束**/

 

paixu(array(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 )

   

基数排序还可以应用在查找重复数,查找间隔数等方面

代码不重要(我的代码仍需改进),思路是关键

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言PHP频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程