排序算法

冒泡算法

冒泡算法的思路是相邻的元素比较,极值出现在数组右端,即每一次循环都可选出极值.
function bubble($arr){
    for($i=0,$len=count($arr);$i<$len-1;++$i){
        for($j=0;$j<$len-1-$i;++$j){
            if($arr[$j]>$arr[$j+1]){
                $tmp=$arr[$j];
                $arr[$j]=$arr[$j+1];
                $arr[$j+1]=$tmp;
            }
        }
    }
    return $arr;
}

选择排序

选择排序是依次用排序好的元素和剩下的元素比较,最值出现在数组左侧.
function selection($arr){
    for($i=0,$len=count($arr);$i<$len-1;++$i){
        for($j=$i+1;$j<$len-1;++$j){
            if($arr[$i]>$arr[$j]){
                $tmp=$arr[$i];
                $arr[$i]=$arr[$j];
                $arr[$j]=$tmp;
            }
        }
    }
    return $arr;
}

二分法

前提是对一个有序数组进行操作,找出所要元素对应的索引.
function harfsort($arr,$target){
    $min=0;
    $max=count($arr)-1;
    $mid=(int)(($max-$min)/2);
    while(true){
        if($target>$mid){
            $min=$mid+1;
        }else if($target<$mid){
            $max=$mid-1;
        }else{
            return $mid;
        }
        if($min>$max){
            reutrn -1;
        }
        $mid=(int)(($max-$min)/2);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值