PHP关于数组的四种基础排序

$arr = [4,0,5,-2,1];

//冒泡排序-----------begin--------------------------------
function BubbleSort($arr){
    for($i=1;$i<count($arr);$i++){
        for($j=0;$j<count($arr)-$i;$j++){
            //倒序排列
            if($arr[$j]>$arr[$j+1]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }
        }
    }
    return $arr;
}
echo "<pre>";
echo "<br/>此方法为冒泡排序:";
print_r(BubbleSort($arr));die;
//冒泡排序----------------end----------------------------------------


//快速排序---------------begin---------------------------------
function Fast($arr){
    if(count($arr)<=1){
        return $arr;
    }
    $temp = $arr[0];
    $left  = $right = [];

    for($i=1;$i<count($arr);$i++){
        if($arr[$i]>$temp){
            $left[] = $arr[$i];
        }else{
            $right[] = $arr[$i];
        }
    }
//    return [$left,$right];
    $left  = Fast($left);
    $right = Fast($right);
//    return $left;
//    return [$left,$right];
    return array_merge($left,[$temp],$right);
}
echo "<pre>";
//echo "<br/>此方法为快速排序:";
//print_r(Fast($arr));
//快速排序---------------end---------------------------------



//选择排序----------------begin-----------------------
//选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
function SelectSort($arr){
    for($i=0;$i<count($arr);$i++){
        //假设一个最小值
        $min = $i;
        for($j=0;$j<count($arr);$j++){
            if($arr[$min]<$arr[$j]){
                $temp = $arr[$j];
                $arr[$j] = $arr[$min];
                $arr[$min] = $temp;
//                list($arr[$min],$arr[$j]) = [$arr[$j],$arr[$min]];
            }
        }
    }
    return $arr;
}
echo "<pre>";
echo "<br/>此方法为选择排序:";
print_r(SelectSort($arr));


//插入排序法由小到大排列(下标是0的默认是有序数组,然后后面的一次往有序数组中放,依次查询)
$data=array(-60,-2,0,6,7,-50,60);
//     默认下标为0的一个数是有序的
for($i=1;$i<count($data);$i++){
    //假设插入数的一个下标为$i
    $addval=$data[$i];
    $up=$i-1;
    //现在是前面的大于了后面的
    while($up>=0 && $data[$up]>$addval){
        //把前面的那个数往后移一位
        $data[$up+1]=$data[$up];
        //如果移一位后它还是后边的大就$up--一个一个的找直到找到为止
        $up--;//
    }
    //把找到的位置给你假设的那个数
    $data[$up+1]=$addval;
}
//print_r($data);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值