php经典算法(二分法、快速排序)

/*
    二分法查找
    @param $arr 查找数组
    @param $key 查找值
    @param $low 最小数
    @param $high 最大数
*/
function func($arr, $key, $low=0, $high=0)
{
    if ($low <= $high) {
        if ($low == 0 && $high == 0) {
            $high = count($high);
        }

        $mid = intval(($low + $high) / 2);

        if ($arr[$mid] == $key) {
            echo $arr[$mid];
        } elseif ($arr[$mid] > $key) {
            func($arr, $key, $low, $mid-1);
        } else {
            func($arr, $key, $mid+1, $high);
        }
    }
}

$arr = ['a', 'b', 'c'];
func($arr, 'c');
/*
    快速排序
    原理:找到当前数组中的任意一个元素(一般选择数组第一个元素),作为标准,新建两个空数组,遍历整个数组元素,如果遍历到的元素比当前的元素要小,那么就放到左边的数组,否则放到右边的数组,然后再对新数组进行同样的操作。
*/
function quick_sort($arr)
{
    if (!is_array($arr)) {
        return false;
    }

    if (count($arr) <= 1) {
        return $arr;
    }

    $left_arr  = [];
    $right_arr = [];
    $key 	   = $arr[0];

    for ($i=0; $i<count($arr); $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, [$key], $right_arr);
}

$arr = [2, 3, 6, 4, 1, 0];
print_r(quick_sort($arr));
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值