计算并列排名的算法
最近在搞一个统计,需要计算学生的成绩排名,而且还需要并列的排名,可能这么说大家都不理解啥叫并列排名,举个例子:
小明 100分 小红100分 小芳90分 小李80分 小孙80分 小兰70分
那么最终的排名应该是:小明 1,小红 1,小芳 3,小李4,小孙4,小兰6。
相信通过上面的例子大家应该明白什么叫并列排序了吧,相同的可以并列,但是不同的需要按照人头去计算,话不多说,直接上代码:
public static void reckonRanking(){ //这里需要将要排名的数组按照你自己的排名规则(从小到大,或从大到小)去排好,可以用冒泡排序或者插入排序等其他算法,这里我就不多说了,自己百度去吧 //下面的例子直接我就用排好序的数组去写了 String[] nums=new String[]{"100","100","90","80","80","70","70","60","60","40"}; String temp=""; //临时变量 int num=0; //自然排序变量 int final_num=0; //最终排名变量 int temp_num=0; //临时增量 for (String str : nums) { //如果临时变量和错误率相等 说明本次错误率和上次是一致的 那么排名也应该和上次一样,但是要记录这种情况出现几次,最后如果当前排名不和上次一致时需要将排名加上空挡的增量 if(temp.equals(str)){ temp_num++; //相等时记录增量 有几条一样的排名 final_num=num; //将排名赋值成和上一次排名一样 }else{ num++; //不相等时 排名自然增加 final_num=num+temp_num; //最终排名为自然排名加上之前的相等记录增量 num=final_num; //将自然排名设置为最终排名的数上 temp_num=0; //记录相等排名的增量置空 } temp=str; //用个临时变量去记录上次的错误率 System.out.println("最后的排名===="+final_num); } }
上面是运行结果,赶快去动手实验一下吧。