PHP常见排序算法12——基数排序

Posted 码农小光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP常见排序算法12——基数排序相关的知识,希望对你有一定的参考价值。

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。
基数排序有两种实现方法,最低位优先LSD和最高位优先MSD。LSD的排序方式由键值的最右边开始,而MSD则相反,由键值的最左边开始。本文采用LSD方式来实现。马上到!方式大家可自行实现。

算法描述

  1. 遍历待排序列,取出其中最大值

  2. 获取最大值的位数

  3. 将待排序列按照最低位进行排序,因为每位的数值个数有限,可使用桶排序或者计数排序

  4. 对上一步排完序后的序列再按照次低位进行排序,排序过程中要保证稳定性

  5. 以此类推,直到最高位排序完成,高位不足的以0填充



算法实现

php代码

<?php function RadixSort(&$arr) { $len = count($arr); if($len<=1) return;  //找出数组中最大值 $maxValue = max($arr); //计算出最大值的位数 $maxDigit = strlen($maxValue);
$mod=10; $dev=1; for($i=1; $i<=$maxDigit; $i++, $dev*=10) { $bucketArr = array(); //对每位运用桶排序 for($j=0; $j<$len; $j++) { $index = floor($arr[$j]/$dev)%$mod; $bucketArr[$index] []= $arr[$j]; } $pos=0; for($j=0; $j<10; $j++) { if(is_array($bucketArr[$j])) { foreach($bucketArr[$j] as $v) $arr[$pos++] = $v; } } }    }?>

算法复杂度分析

时间复杂度:O (n+k)
空间复杂度:O (n)
稳定性:基数排序是稳定的

以上是关于PHP常见排序算法12——基数排序的主要内容,如果未能解决你的问题,请参考以下文章

常见的排序算法( 归并排序,计数排序 , 基数排序)

常见排序查找算法

常见排序算法-基数排序计数排序

基数排序算法的Java实现

PHP基数排序算法 - 类型转换好吗?

算法渣-排序-基数排序