php常见的一些基础算法

1.冒泡算法

冒泡算法是将一个未排序的序列,从前往后对相邻的两个值依次进行对比和调整,大的值下沉,小的值上冒。

$arr = array(12,45,23,25,14,9,5,46,56,98,57);
function bsort($arr){
    $len = count($arr);
    for($i=1;$i<$len;$i++){
        for($k=0;$k<$len-$i;$k++){
            if($arr[$k]>$arr[$k+1]){
                $tmp=$arr[$k+1];
                $arr[$k+1]=$arr[$k];
                $arr[$k]=$tmp;
            }
        }
    }
    return $arr;
}

2.选择排序

选择排序是在一组未排序的序列中选出最小的一个数与第一个位置数据交换,在剩下的序列中选出第二小的一个数放在第二个位置,直到倒数第二个数字和倒数第一个数字比较为止。

$arr = array(12,45,23,25,14,9,5,46,56,98,57);
function selectsort($arr){
    $len = count($arr);
    for($i=0;$i<$len-1;$i++){
        $mixm=$i;
        for($j=$i+1;$j<$len;$j++){
            if($arr[$mixm]>$arr[$j]){
                $mixm = $j;
            }
            if($mixm!=$i){
                $tmp=$arr[$mixm];
                $arr[$mixm]=$arr[$i];
                $arr[$i]=$tmp;
            }
        }
        
    }
    return $arr;
}

3.插入排序

在要排序的一组数组中,假如前面的数已经排序好顺序的,现在要将第n个数插入到已经排序的数组中,使得插入之后任然是有序的排序。如此循环,直到排好为止。

$arr = array(12,45,23,25,14,9,5,46,56,98,57);
function insertsort($arr){
    $len = count($arr);
    for($i=1;$i<$len;$i++){
        $tmp=$arr[$i];
        for($j=$i-1;$j>=0;$j--){
            if($tmp<$arr[$j]){
                $arr[$j+1]=$arr[$j];
                $arr[$j]=$tmp;
            }else{
                break;
            }
        }
        
    }
    return $arr;
}

4.快速排序

选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排的序列分成两个部分,一部分比基准元素小,另一部分比基准元素大,此时基准元素已经在其排好序列的正确位置,然后使用同样的办法递归的排序划分的两部分。

$arr = array(12,45,23,25,14,9,5,46,56,98,57);
function quicksort($arr){
    $len = count($arr);
    if($len<=1){
        return $arr;
    }
    $base=$arr[0];
    $minArr=array();
    $maxArr=array();
    for($i=1;$i<$len;$i++){
        if($base>$arr[$i]){
            $minArr[]=$arr[$i];
        }else{
            $maxArr[]=$arr[$i];
        }
    }
    $minArr=quicksort($minArr);
    $maxArr=quicksort($maxArr);
    return array_merge($minArr,array($base),$maxArr);
}

 

转载于:https://www.cnblogs.com/bigvase/p/6919030.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值