用php实现基础算法之快速排序

快速排序的核心思想是递归,那么何为递归?最简单的理解就是程序自己调用自己!接下来回到主题,快速排序的基本思想就是什么呢?举个例子,假设现在有这样一个需求:给50个人按照身高排序。我们假定第1个人的身高排在中间位置,那么其余49人逐个跟第1个人做比较,比他高的人都站到右侧,比他矮的人站到左侧,这样就把剩下的人分成了两个集合(左右两个);接下来各个集合依然按照这个规则继续排队,直到最后集合都变成只有1个人,此时也就完成了排序。以下代码来实现整个过程:

<?php
    
    function quickSort($arr){
        $count = count($arr);
        if($count <= 1)
            return $arr;

        $mid = $arr[0];
        $left = $right = [];
        for($i = 1;$i < $count;$i++){
            if($arr[$i] < $mid){
                $left[] = $arr[$i];
            }else{
                $right[] = $arr[$i];
            }
        }

        $left = quickSort($left);
        $right = quickSort($right);
        return array_merge($left,[$mid],$right);
    }

    $arr = [1,-1,100,88,-200,33,10];
    $arr = quickSort($arr);
    print_r($arr);

输出:Array ( [0] => -200 [1] => -1 [2] => 1 [3] => 10 [4] => 33 [5] => 88 [6] => 100 )

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值