请使用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>";