PHP 四大排序 思路及代码

本文深入介绍了几种常见的排序算法实现,包括冒泡排序、快速排序、插入排序和选择排序。每种算法都通过PHP代码进行了详细解释,展示了如何通过不同的逻辑进行数组排序。
​
$arr = [23,43,1,2,41,567,32,11];
//冒泡排序
//思路:比较数组相邻的两个元素,把小的放在前面,以此类推遍历完所有元素
function bubble_sort($arr)
{
    $count = count($arr);
    if($count<1) return $arr;
    for($i=0;$i<$count;$i++){
        for($j=$i+1;$j<$count;$j++){
            if($arr[$i]>$arr[$j]){
                $temporary = $arr[$i];
                $arr[$i] = $arr[$j];
                $arr[$j] = $temporary;
            }
        }
    }
    return $arr;
}

//快速排序
//思路 以数组第一个元素为基准,比他大的放左边,比他小的放右边,最后合并
function quick_sort($arr)
{
    $count = count($arr);
    if($count<=1) return $arr;
    $left_arr = [];
    $right_arr = [];
    $first = $arr[0];
    for($i=1;$i<$count;$i++){
        if($arr[$i]>$first){
            $right_arr[] = $arr[$i];
        }else{
            $left_arr[] = $arr[$i];
        }
    }
    return array_merge(quick_sort($left_arr),[$first],quick_sort($right_arr));
}

//插入排序
//思路:将要排序的元素插入到已经嘉定排序好的数组的指定位置
function insert_sort($arr)
{
    $count = count($arr);
    if($count<=1) return $arr;
    for($i=1;$i<$count;$i++){
        //获取当前需要比较的元素
        $temp = $arr[$i];
        for($j=$i-1;$j>=0;$j--){
            //$arr[i] 需要插入的元素,$arr[j] 需要比较的元素
            if($arr[$j]>$temp){
                //如果插入的元素比较小,交换位置
                $arr[$j+1] =$arr[$j];
                $arr[$j] = $temp;
            }else{
                //如果不需要比较了,直接跳过
                break;
            }
        }
    }
    return $arr;
}


//选择排序
function select_sort($arr){
    $len = count($arr);
    for($i=0;$i<$len;$i++){
        $tmp = $i;//假设$i为最小值,并作为已排序序列的最后一个元素
        for($j=$i;$j<$len;$j++){
            if($arr[$j]<$arr[$tmp]){
                $tmp = $j;//记录最小值得下标
            }
        }
        if($tmp!=$i){//根据下标是否改变,如果改变则调换位置。
            list($arr[$tmp],$arr[$i])=[$arr[$i],$arr[$tmp]];
        }
    }
    return $arr;
}
print_r(select_sort($arr));

​

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值