当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-06-30 20:33:38 浏览: 评论:0 

本文给大家汇总介绍了一些php中常见的排序算法的代码,非常实用,有需要的小伙伴可以参考下。

1、冒泡排序

  1. function bubble_sort($arr){ 
  2.   $n = count($arr); 
  3.   for($i=0;$i<$n-1;$i++){ 
  4.     for($j=$i+1;;$j<$n-$i;$j++){ 
  5.       if($arr[$j]<$arr[$i]){ 
  6.         $temp = $arr[$i]; 
  7.         $arr[$i] = $arr[$j]; 
  8.         $arr[$j] = $temp
  9.       } 
  10.     } 
  11.   } 

2、归并排序

merge函数将指定的两个有序数组(arr1arr2,)合并并且排序,我们可以找到第三个数组,然后依次从两个数组的开始取数据哪个数据小就先取哪个的,然后删除掉刚刚取过///的数据。

  1. function al_merge($arrA$arrB
  2. $arrC = array(); 
  3. while (count($arrA) && count($arrB)) { 
  4. //这里不断的判断哪个值小,就将小的值给到arrC,但是到最后肯定要剩下几个值, 
  5. //不是剩下arrA里面的就是剩下arrB里面的而且这几个有序的值,肯定比arrC里面所有的值都大所以使用 
  6. $arrC[] = $arrA['0'] < $arrB['0'] ? array_shift($arrA) : array_shift($arrB); 
  7. return array_merge($arrC$arrA$arrB); 
  8.  
  9. //归并排序主程序 
  10. function al_merge_sort($arr
  11. $len = count($arr); 
  12. if ($len <= 1) { 
  13. return $arr//递归结束条件,到达这步的时候,数组就只剩下一个元素了,也就是分离了数组 
  14. $mid = intval($len / 2); //取数组中间 
  15. $left_arr = array_slice($arr, 0, $mid); //拆分数组0-mid这部分给左边left_arr 
  16. $right_arr = array_slice($arr$mid); //拆分数组mid-末尾这部分给右边right_arr 
  17. $left_arr = al_merge_sort($left_arr); //左边拆分完后开始递归合并往上走 
  18. $right_arr = al_merge_sort($right_arr); //右边拆分完毕开始递归往上走 
  19. $arr = al_merge($left_arr$right_arr); //合并两个数组,继续递归 
  20. return $arr
  21.  
  22. $arr = array(12, 5, 4, 7, 8, 3, 4, 2, 6, 4, 9); 
  23. print_r(al_merge_sort($arr)); 

3、二分查找-递归。

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

4、二分查找-非递归

  1. function bin_search($arr,$low,$high,$value) {//$arr 数组; $slow 最小索引; $high 最大索引 $value 查找的值 
  2.   while($low<=$high) {  
  3.     $mid=intval(($low+$high)/2);  
  4.     if($value==$arr[$mid]){ 
  5.       return $mid;  
  6.     }elseif($value<$arr[$mid]){ 
  7.       $high=$mid-1;  
  8.     }else
  9.       $low=$mid+1;  
  10.     }  
  11.   } 
  12.   return false;  

5、快速排序

  1. function quick_sort($arr) { 
  2.   $n=count($arr); 
  3.   if($n<=1) 
  4.     return $arr
  5.   $key=$arr[0]; 
  6.   $left_arr=array(); 
  7.   $right_arr=array(); 
  8.   for($i=1;$i<$n;$i++) { 
  9.     if($arr[$i]<=$key
  10.       $left_arr[]=$arr[$i]; 
  11.     else 
  12.       $right_arr[]=$arr[$i]; 
  13.   } 
  14.   $left_arr=quick_sort($left_arr); 
  15.   $right_arr=quick_sort($right_arr); 
  16.   return array_merge($left_arr,array($key),$right_arr); 

6、选择排序

  1. function select_sort($arr) { 
  2.   $n=count($arr); 
  3.   for($i=0;$i<$n;$i++) { 
  4.     $k=$i
  5.     for($j=$i+1;$j<$n;$j++) { 
  6.       if($arr[$j]<$arr[$k]) 
  7.         $k=$j
  8.     } 
  9.     if($k!=$i) { 
  10.       $temp=$arr[$i]; 
  11.       $arr[$i]=$arr[$k]; 
  12.       $arr[$k]=$temp
  13.     } 
  14.   } 
  15.   return $arr

7、插入排序

  1. function insertSort($arr) { 
  2.   $n=count($arr); 
  3.   for($i=1;$i<$n;$i++) { 
  4.     $tmp=$arr[$i]; 
  5.     $j=$i-1; 
  6.     while($arr[$j]>$tmp) { 
  7.       $arr[$j+1]=$arr[$j]; 
  8.       $arr[$j]=$tmp
  9.       $j--; 
  10.       if($j<0) 
  11.         break
  12.     } 
  13.   } 
  14.   return $arr
  15. }

Tags: PHP排序算法

分享到: