php常用算法

1、插入排序

function insert_sort($arr){
    $count = count($arr);
    for($i=1; $i<$count; $i++){
        $tmp = $arr[$i];
        $j = $i - 1;
        while($arr[$j] > $tmp){
            $arr[$j+1] = $arr[$j];
            $arr[$j] = $tmp;
        }
    }
    return $arr;
}
var_dump(insert_sort(array(34,12,54,44,65)));

2、冒泡排序
function bubble_sort($array){
    if (empty($array)){
        return 'no array data';
    }

    $count = count($array);
    if ($count == 1){
        return $array;
    }

    for ($i=0;$i<$count-1;$i++){
        for ($j=$count-1;$j>$i;$j--){
            if ($array[$j] > $array[$j-1]){
                $temp = $array[$j-1];
                $array[$j-1] = $array[$j];
                $array[$j] = $temp;
            }
        }
    }
    return $array;
}

$array = array(23,43,12,32,9,76,2,19);
var_dump(bubble_sort($array));

3、快速排序
function quickSort($arr){
    $len = count($arr);
    if($len <= 1) {
        return $arr;
    }
    $key = $arr[0];
    $left_arr    = array();
    $right_arr    = array();

    for($i=1; $i<$len; $i++){
        if($arr[$i] <= $key){
            $left_arr[] = $arr[$i];
        } else {
            $right_arr[] = $arr[$i];
        }
    }

    $left_arr    = quickSort($left_arr);
    $right_arr    = quickSort($right_arr);
    return array_merge($left_arr, array($key), $right_arr);
}

4、二分算法
/**
 * @param $arr      用来查找的数组
 * @param $val      需要查找的值
 * @param $start     起始位置
 * @param $end       结束位置
 * @return float|int|void  数组中位置
 */
function twosearch($arr,$val,$start,$end){
    if ($start > $end){
        echo "can't search";
        return;
    }
    $middle=round(($start+$end)/2);
    if($arr[$middle]>$val){
        twosearchmethod($arr, $val, $start, $middle-1);
    }elseif($arr[$middle]<$val){
        twosearchmethod($arr, $val, $middle+1, $end);
    }else{
        return $middle;
    }
    return -1;

}
var_dump( twosearch(array(3,4,5,6,7),5,0,4));



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值