对学生成绩做一个排名,分数为一个数组,排好名次后输出排名结果:
比如 $scores = array(90,100,100)
; 自定义函数实现返回数组 $rank(3,1,1)
;
对学生成绩做一个排名,分数为一个数组,排好名次后输出排名结果:
比如 $scores = array(90,100,100)
; 自定义函数实现返回数组 $rank(3,1,1)
;
题主想要的是按原数组顺序显示的排名(可并列)。大体思路是将原数组补充上位置信息,然后按照排序的结果反向构建排名数组。写出来比较啰嗦:
get_ranks(a[1:n])
s ← array(n)
ranks ← array(n)
for i from 1 to n ▷ s[i] has record type
s[i] ← {position: i, value: a[i], rank: 0}
descending_sort(s by value) ▷ sort by s[i].value
s[1].rank ← 1
for i from 2 to n
if s[i].value < s[i-1].value ▷ dense rank
s[i].rank ← s[i-1].rank + 1
else
s[i].rank ← s[i-1].rank
for i from 1 to n ▷ construct result
ranks[s[i].position] ← s[i].rank
return ranks[]
注意如果有多个并列第n,下一个人将是第n+1名,这点与题主给出例子有点不同。整个算法的复杂度瓶颈还是排序,即O(n lgn)。
1 回答3.3k 阅读✓ 已解决
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
2 回答749 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.3k 阅读
<?php
?>
这个能满足你的需求,但是我有一个问题, 两个并列第一,考99那位不应该是第二名么