不使用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 "
";
print_r($english);
echo "
"
;

你可能感兴趣的:(算法面试题)