• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

php 搞代码 3年前 (2022-01-25) 22次浏览 已收录 0个评论

//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++) {<strong>(本文来源gaodai#ma#com搞@@代~&码网</strong><pre>搞代gaodaima码

$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$tmp) {      $arr[$j+1]=$arr[$j];      $arr[$j]=$tmp;      $j--;      if($j<0)        break;    }  }  return $arr;}

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP版本常用的排序算法汇总_PHP

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址