加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮南站长网 (https://www.0554zz.cn/)- 管理运维、图像技术、智能营销、专属主机、5G!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP版本常用的排序算法汇总

发布时间:2022-07-16 10:51:34 所属栏目:PHP教程 来源:互联网
导读:本文给大家汇总介绍了一些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]; $a
  本文给大家汇总介绍了一些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;
  }
 

(编辑:淮南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读