黑马程序员技术交流社区

标题: 【上海校区】常用算法 PHP 版 [打印本页]

作者: 不二晨    时间: 2018-11-16 09:33
标题: 【上海校区】常用算法 PHP 版
下面分享一些最常见的算法,用PHP如何实现。
冒泡排序
function bubble_sort($arr) {
$n=count($arr);for($i=0;$i<$n-1;$i++){    for($j=$i+1;$j<$n;$j++) {        if($arr[$j]<$arr[$i]) {            $temp=$arr[$i];            $arr[$i]=$arr[$j];            $arr[$j]=$temp;        }    }}return $arr;
}
归并排序
function Merge(&$arr, $left, $mid, $right) {
$i = $left;$j = $mid + 1;$k = 0;$temp = array();while ($i <= $mid && $j <= $right) {    if ($arr[$i] <= $arr[$j])        $temp[$k++] = $arr[$i++];    else        $temp[$k++] = $arr[$j++];}while ($i <= $mid)    $temp[$k++] = $arr[$i++];while ($j <= $right)    $temp[$k++] = $arr[$j++];for ($i = $left, $j = 0; $i <= $right; $i++, $j++)    $arr[$i] = $temp[$j];
}
function MergeSort(&$arr, $left, $right) {
if ($left < $right) {    $mid = floor(($left + $right) / 2);    MergeSort($arr, $left, $mid);    MergeSort($arr, $mid + 1, $right);    Merge($arr, $left, $mid, $right);}
}
二分查找-递归
function bin_search($arr,$low,$high,$value) {
if($low>$high)    return false;else {    $mid=floor(($low+$high)/2);    if($value==$arr[$mid])        return $mid;    elseif($value<$arr[$mid])        return bin_search($arr,$low,$mid-1,$value);    else        return bin_search($arr,$mid+1,$high,$value);}
}
二分查找-非递归
function bin_search($arr,$low,$high,$value) {
while($low<=$high) {    $mid=floor(($low+$high)/2);    if($value==$arr[$mid])        return $mid;    elseif($value<$arr[$mid])        $high=$mid-1;    else        $low=$mid+1;}return false;
}
快速排序
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);
}
选择排序
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;
}
插入排序
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;
}


作者: 不二晨    时间: 2018-11-21 17:14

作者: 魔都黑马少年梦    时间: 2018-11-22 16:56

作者: 小影姐姐    时间: 2018-11-22 17:19





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2