一、先定义一个数组

$arr = [1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39, 2];
PHP 冒泡排序+二分查找_冒泡排序

二、代码实现冒泡排序

function bubbleSort($arr){
    $count=count($arr);
    for ($i=1;$i<$count;$i++){
        for ($k=0;$k<$count-$i;$k++){
            if($arr[$k]>$arr[$k+1]){
                $temp=$arr[$k+1];
                $arr[$k+1]=$arr[$k];
                $arr[$k]=$temp;
            }
        }
    }
    return $arr;
}
$arr = bubbleSort($arr);
print_r($arr);
PHP 冒泡排序+二分查找_冒泡排序

三、效果截图

PHP 冒泡排序+二分查找_php_03PHP 冒泡排序+二分查找_冒泡排序

这样一个冒泡排序就完成啦 

PHP实现二分查找

//    非递归
//    $target是要查找的目标 $arr是已经排序好的数组
function binary(&$arr,$low,$top,$target){
    while($low <= $top){
//由于php取商是有小数的,所以向下取整,不过也可不加,数组也会取整
        $mid = floor(($low+$top)/2);
        if($arr[$mid]==$target){
            return $mid;
        }elseif($arr[$mid]<$target){
            $low = $mid+1;
        }else{
            $top = $mid-1;
        }
    }
    return -1;
}
$arr = array(1,3,9,23,54);
echo binary($arr, 0, sizeof($arr), 23);
点击并拖拽以移动

使用递归实现二分查找

//    递归
function binaryRecursive(&$arr,$low,$top,$target){
    if($low<=$top){
        $mid = floor(($low+$top)/2);
        if($arr[$mid]==$target){
            return $mid;
        }elseif($arr[$mid]<$target){
            return binaryRecursive($arr,$mid+1,$top,$target);
        }else{
            return binaryRecursive($arr,$low,$mid-1,$target);
        }
    }else{
        return -1;
    }
}
$arr = array(1,3,9,23,54);
echo binaryRecursive($arr, 0, sizeof($arr), 9);

此时,这样的一个二分查找就好了。