几种常见排序方法

冒泡

function bubble($data){
    $size = count($data);
    for($i=0;$i<$size;$i++){
        for($j=$i+1;$j<$size;$j++){
            if($data[$i]<$data[$j]){
                $tmp = $data[$j];
                $data[$j] = $data[$i];
                $data[$i] = $tmp;
            }
        }
    }
    return $data;
}

快排

function quicksort($data){
    $size = count($data);
    $k = $data[0];
    $x = array();
    $y = array();
    if($size>1){
        for($i=1;$i<$size;$i++){
            if($data[$i]<=$k){
                $x[] = $data[$i];
            }else{
                $y[] = $data[$i];
            }
        }
        $x = quicksort($x);
        $y = quicksort($y);
        return array_merge($x, array($k), $y);
    }else{
        return $data;
    }
}

二分查找(效率高但必须是排好序的数列)

function binary_search($num, $data){
    $size = count($data);
    $low = 0;
    $height = $size - 1;

    while($height>=$low){
        $mid = floor(($low + $height) / 2);
        if($num == $data[$mid]){
            return $mid;
        }elseif($num > $data[$mid]){
            $low = $mid + 1;
        }elseif($num < $data[$mid]){
            $height = $mid -1;
        }
    }
}

斐波那契数列

//递归
function recursion($num){
    if($num<=2)return 1;
    return recursion($num - 1) + recursion($num - 2);
}
//循环
function circle($num){
    $x = 0;
    $y = 1;
    $z = 0;
    if($num==1)return 1;
    for($i=2;$i<=$num;$i++){
        $z = $x + $y;
        $x = $y;
        $y = $z;
    }
    return $z;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值