基数排序

xiaoxiao2021-02-28  37

/** *基数排序 又称桶子排序

*/

//定义数组 $arr = [123,12,3,45,235,3,545,56,4,5,56,568,568,22,132,123,42,523,345,34,46,64,1233]; // $arr = [2,343,342,1,128,43,4249,814,687,654,3]; //第一步先定义数组 十个桶子 $sort = []; //创建十个桶 下标分别是桶号 for($i = 0;$i<=9;$i++) {     $sort[$i] = []; } //获取数组的大小 $count = count($arr);  //获取数组的长度,数组中共有多少个元素 //获取数组中最大的值 $max = max($arr);  //获取数组中最大的值 //统计最大值有多少位 $len = strlen($max); //循环需要把对应桶子的数放入对应的桶子中 for($i = 0;$i<$len;$i++) {     //计算基数     $exp = pow(10,$i);     //进入桶子中     for($j = 0;$j<$count;$j++)     {         $num = ($arr[$j]/$exp); //求出所对应的位数上的数了         $sort[$num][] = $arr[$j];  //放入桶内     }     //把分好的桶子里的数接着连起来进行下一位的比较     $arr = [];  //先把数组清空 等会把带排好的数放进arr     foreach($sort as $k=>$v)     {         //直接把sort的值按照顺序放进来arr中         $arr = array_merge($arr,$v);         $sort[$k] = [];     }     } echo "<pre>"; print_r($arr);
转载请注明原文地址: https://www.6miu.com/read-2300171.html

最新回复(0)