不使用PHP内置排序函数对二维数组实现快速排序的面试题

请使用PHP设计一个函数,对学生英语考试得分从高到低排序,输入时所有学生的学号和考试得分,返回排好序的考试得分和对应学生的学号。考试满分为100,得分可能会有小数,由于考试评分要求,小数位只会是0或0.5
要求:
请不要使用qsort等系统内置排序函数
请使用你认为最快最优的方法实现该函数并使排序的性能最高。(嘀嗒团)

function quick_sort(&arr,$left,$right){
    if($left < $right){
        //依次取出数组的然后跟后面对比排序
        $privot = $arr[$left];
        $low = $left;
        $high = $right;
        while($low < $high){
            //同后面的作比较要是小于第一个则调换到前面
            while($low < $high && $arr[$high]['score'] >= $privot['score']){
                $high--;
            }
            $tmp = $arr[$low];
            $arr[$low] = $arr[$high];
            $arr[$high] = $tmp;
            //同前面的作比较若是大于后面的则调换到后面去
            while($low < $high && $arr[$low]['score'] <= $privot['score']){
                $low++;
            }
            $tmp = $arr[$low];
            $arr[$low] = $arr[$high];
            $arr[$high] = $tmp;

            //以low为中间值再去回调再去排序
            quick_sort($arr,$left,$low-1);
            quick_sort($arr,$low+1,$right);
        }


    }
}
$english = array(
            array('sid'=>1,'score'=>76),
            array('sid'=>2,'score'=>93),
            array('sid'=>3,'score'=>68.5),
            array('sid'=>4,'score'=>82.5),
        );
$left = 0;
$right = count($english) - 1;
quick_sort($english,$left,$right);
echo "<pre>";
print_r($english);
echo "</pre>";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值