1. 概述

  • 思路:将原序按照个位数排序得到中间序列,中间序列再按照次低位排序得到新的序列,以次类推至最高位,就完成了对原序进行排序。
  • 稳定性:稳定
  • 其他:基数排序是桶排序的特例

    2. 实现代码

    ```php <?php class RadixSort { private array $ori; public array $new = []; public function __construct(array $arr) {

    1. $this->ori = $arr;
    2. $r = $this->sort($this->ori);
    3. $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); ```