1. 概述
- 思路:将原序按照个位数排序得到中间序列,中间序列再按照次低位排序得到新的序列,以次类推至最高位,就完成了对原序进行排序。
- 稳定性:稳定
-
2. 实现代码
```php <?php class RadixSort { private array $ori; public array $new = []; public function __construct(array $arr) {
$this->ori = $arr;$r = $this->sort($this->ori);$this->new = $r;
}
private function sort(array $arr) {
$bit = $this->getMaxBit($arr); for ($i = 1; $i <= $bit; $i++) { $arr = $this->radix($arr, $i); } return $arr;}
private function radix(array $arr, $b) {
$tmp = []; $narrow = pow(10, $b - 1); for ($i = 0; $i < count($arr); $i++) { $dividend = $narrow ? floor($arr[$i] / $narrow) : $arr[$i]; $mod = $dividend % 10; $tmp[$mod][] = $arr[$i]; } ksort($tmp); $ret = []; foreach ($tmp as $v) { $ret = array_merge($ret, $v); } return $ret;}
// 获取最大位数 private function getMaxBit(array $arr) : int {
$maxBit = 1; foreach ($arr as $v) { $bit = 1; while (($v = floor($v / 10)) != 0) { $bit++; } ($bit > $maxBit) && $maxBit = $bit; } return $maxBit;} }
$arr = [430, 421, 240, 115, 532, 305, 124, 12340]; $cls = new RadixSort($arr);
echo implode(‘,’, $cls->new); ```
