PHP基础算法(冒泡)(选择)(二分查找)

本文回顾PHP的基础算法,包括冒泡排序的原理(时间复杂度O(N^2)),快速排序的递归划分过程,以及适用于大数据量的二分查找方法。通过理解这些算法,有助于提升PHP编程能力。
摘要由CSDN通过智能技术生成

今天有点时间,回顾一下PHP的基本算法,好久没写了,今天复习一下,免得忘记了!!!

冒泡排序

相邻两个元素比较,小于(或大于)则交换两个元素的位置,直到走完所有的元素。

时间复杂度O(N^2)

/**
 * @param $arr
 * @return mixed
 * 冒泡排序
 */
function MaopaoSort($arr){
//    $arr = ['9','1','0'];
    for ($i = 0;$i<count($arr);$i++){
        for($j = 0;$j<count($arr)-$i-1;$j++){
            if($arr[$j]>$arr[$j+1]){
                swap($arr[$j],$arr[$j+1]);
            }
        }
    }
    return $arr;
}
function swap(&$a,&$b){
    $temp = $a;
    $a = $b;
    $b = $temp;
}

快速排序:

在数组中挑出一个元素(多为第一个)作为基本值,扫描一遍数组将比基本值小的元素排在基本值左边,将所有比基本值大的元素排在基本值之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致,最后将数组合并起来。记得将基本值加在左边数组与右边数组之间。

/**
 * @param $arr
 * @return array
 * 快速排序
 */
function QuickSort($arr){

    if(count($arr)<=1){
        return $arr;
    }
    $tmp = $arr[0];
    $left = array(); // 小于中间值
    $right = array();// 大于中间值
    for($i=1;$i<count($arr);$i++){
        if($arr[$i]<$tmp){
            $left[] = $arr[$i];
        }else{
            $right[] = $arr[$i];
        }
    }

    $left = QuickSort($left);
    $right = QuickSort($right);

    return array_merge($left,array($tmp),$right);
}

二分查找

对于给定值val,从序列的中间位置开始比较,如果当前位置值等于val,则查找成功;若val小于当前位置值,则在数列的前半段中查找;若val大于当前位置值则在数列的后半段中继续查找,直到找到为止。(数据量大的时候使用)

/**
 * @param $arr
 * 二分查找
 * $low 最小位置
 * $high 最大位置
 * $val 目标值
 * $arr 目标数组
 */
function BinSearch($low,$high,$val,$arr){
    if ( $low <= $high){
        $mid =  intval(($low+$high)/2 );
        if ($arr[$mid] ==  $val){
            return $mid;
        }elseif ( $val < $arr[$mid]){
            return  BinSearch($arr, $low,  $mid-1, $val);
        }else{
            return  BinSearch($arr, $mid+ 1, $high, $val);
        }
    }
    return -1;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值