温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

PHP中常用的排序算法有哪些

发布时间:2021-01-26 16:35:07 来源:亿速云 阅读:170 作者:Leah 栏目:开发技术

PHP中常用的排序算法有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

//1、冒泡排序

function bubble_sort($arr){   $n = count($arr);   for($i=0;$i<$n-1;$i++){     for($j=$i+1;;$j<$n-$i;$j++){       if($arr[$j]<$arr[$i]){         $temp = $arr[$i];         $arr[$i] = $arr[$j];         $arr[$j] = $temp;       }     }   } }

 //2、归并排序

//merge函数将指定的两个有序数组(arr1arr2,)合并并且排序 //我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据 function al_merge($arrA, $arrB) { $arrC = array(); while (count($arrA) && count($arrB)) { //这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值, //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用 $arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB); } return array_merge($arrC, $arrA, $arrB); } //归并排序主程序 function al_merge_sort($arr) { $len = count($arr); if ($len <= 1) { return $arr; //递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组 } $mid = intval($len / 2); //取数组中间 $left_arr = array_slice($arr, 0, $mid); //拆分数组0-mid这部分给左边left_arr $right_arr = array_slice($arr, $mid); //拆分数组mid-末尾这部分给右边right_arr $left_arr = al_merge_sort($left_arr); //左边拆分完后开始递归合并往上走 $right_arr = al_merge_sort($right_arr); //右边拆分完毕开始递归往上走 $arr = al_merge($left_arr, $right_arr); //合并两个数组,继续递归 return $arr; } $arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9); print_r(al_merge_sort($arr));

 //3、二分查找-递归

//二分查找-递归 function bin_search($array,$low,$high,$k){   if($low <= $high){     $mid = intval(($low+$high)/2);   }else{     return false;   }   if($array[$mid] == $k){     return $mid;   }elseif($k < $array[$mid]){     return bin_search($array,$low,$mid-1,$k);   }else{     return bin_search($array,$mid+1,$high,$k);   } } $arr = array(12, 5, 4, 7, 3, 8, 4, 2, 6, 4, 9); $index = bin_search($arr,0,10,12); //直接输出为空,不解 echo(intval($index));

//4、二分查找-非递归

function bin_search($arr,$low,$high,$value) {//$arr 数组; $slow 最小索引; $high 最大索引 $value 查找的值   while($low<=$high) {      $mid=intval(($low+$high)/2);      if($value==$arr[$mid]){       return $mid;      }elseif($value<$arr[$mid]){       $high=$mid-1;      }else{       $low=$mid+1;      }    }   return false;  }

//5、快速排序

function quick_sort($arr) {   $n=count($arr);   if($n<=1)     return $arr;   $key=$arr[0];   $left_arr=array();   $right_arr=array();   for($i=1;$i<$n;$i++) {     if($arr[$i]<=$key)       $left_arr[]=$arr[$i];     else       $right_arr[]=$arr[$i];   }   $left_arr=quick_sort($left_arr);   $right_arr=quick_sort($right_arr);   return array_merge($left_arr,array($key),$right_arr); }

//6、选择排序

function select_sort($arr) {   $n=count($arr);   for($i=0;$i<$n;$i++) {     $k=$i;     for($j=$i+1;$j<$n;$j++) {       if($arr[$j]<$arr[$k])         $k=$j;     }     if($k!=$i) {       $temp=$arr[$i];       $arr[$i]=$arr[$k];       $arr[$k]=$temp;     }   }   return $arr; }

//7、插入排序

function insertSort($arr) {   $n=count($arr);   for($i=1;$i<$n;$i++) {     $tmp=$arr[$i];     $j=$i-1;     while($arr[$j]>$tmp) {       $arr[$j+1]=$arr[$j];       $arr[$j]=$tmp;       $j--;       if($j<0)         break;     }   }   return $arr; }

关于PHP中常用的排序算法有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI