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

前端之家收集整理的这篇文章主要介绍了PHP版本常用的排序算法汇总前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

//1、冒泡排序

PHP;"> 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、归并排序

PHP;"> //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,$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,2,6,9);
print_r(al_merge_sort($arr));

//3、二分查找-递归

PHP;"> //二分查找-递归 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,$mid-1,$k); }else{ return bin_search($array,$mid+1,$k); } } $arr = array(12,9); $index = bin_search($arr,10,12); //直接输出为空,不解 echo(intval($index));

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

PHP;"> function bin_search($arr,$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、快速排序

PHP;"> 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、选择排序

PHP;"> 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、插入排序

PHP;"> 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相关文章