计算并列排名的算法

最近在搞一个统计,需要计算学生的成绩排名,而且还需要并列的排名,可能这么说大家都不理解啥叫并列排名,举个例子:

小明 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);
        }
    }

上面是运行结果,赶快去动手实验一下吧。

posted @ 2017-04-08 16:07  刺风  阅读(9257)  评论(0编辑  收藏  举报