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

    xiaoxiao2021-03-25  96

    请使用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>";
    转载请注明原文地址: https://ju.6miu.com/read-13544.html

    最新回复(0)