根据公司需求,需要编写中式和美式排名算法,根据具体业务编写的,代码如下,看不懂留言,欢迎探讨,求高手指教更高效稳定的方法。
private static int[] datas = {9,9,10,10,9,8,4,3,3,3,3,3,4,3,44,2,2,2,2,1};

public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
for(int i = 0; i < 100; i ++){
map.put(i + "",(int)(Math.random()*100)%3+",");
}
Map<String,String> map1 = orderByChPfSort(map);
System.out.println("中式排名:");
for(Map.Entry<String,String> entry : map1.entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
System.out.println("美式排名:");
Map<String,String> map2 = orderByPf(map);
for(Map.Entry<String,String> entry : map2.entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}

/**
* 中式排名算法
* @param map
* @return
*/
private static Map<String,String> orderByChPfSort(Map<String, String> map){
List<Map.Entry<String, String>> lists = new ArrayList<>(map.entrySet());
//step1: 排序
Collections.sort(lists, new Comparator<Map.Entry<String, String>>() {
@Override
public int compare(Map.Entry<String, String> o1, Map.Entry<String, String> o2) {
String value1 = o1.getValue();
String value2 = o2.getValue();
int length1 = value1.split(",").length;

return Double.valueOf(value1.split(",")[length1-1]).compareTo(Double.parseDouble(value2.split(",")[length1-1]));
}
});

//step2:先给第一个数第一名的位置,
//step3:再将后面的数与前一个数进行对比,如果大就获取前一个数的排名再加1,如果等于,就去前一个的排名给后面数
Map<String,String> dataSort = new HashMap<>();
int i = 0;
String firstValue = "";
String firstKey = "";
for(Map.Entry<String, String> entry : lists){
String value2 = entry.getValue();
int length2 = value2.split(",").length;
if(i == 0){
dataSort.put(entry.getKey(), value2 + 1 + ",");
}else{
if(Double.parseDouble(value2.split(",")[length2 - 1]) > Double.parseDouble(firstValue.split(",")[length2-1])){
dataSort.put(entry.getKey(),value2 + ((Integer.parseInt(dataSort.get(firstKey).split(",")[length2])) + 1) + ",");
}else if((Double.parseDouble(value2.split(",")[length2 - 1]) == Double.parseDouble(firstValue.split(",")[length2-1]))){
dataSort.put(entry.getKey(),value2 + (Integer.parseInt(dataSort.get(firstKey).split(",")[length2])) + ",");
}
}
firstValue = value2;
firstKey = entry.getKey();
i++;
}
return dataSort;
}

/**
* 评分美式排名方法
*
* @param map
* @return
*/
private static Map<String, String> orderByPf(Map<String, String> map) {
Map<String, String> zsPmMap = new TreeMap<>();
//step1:遍历map
for (Map.Entry<String, String> m : map.entrySet()) {
int size = 1;
String[] strsm = m.getValue().split(",");
int lengthm = strsm.length;
//step2:遍历map
for (Map.Entry<String, String> m1 : map.entrySet()) {
String[] strsm1 = m1.getValue().split(",");
int lengthm1 = strsm1.length;
//step3:将map中的每个值与其他值都对比一遍,如果有大于的就将排名数加1
if (Double.parseDouble(strsm[lengthm - 1]) > Double.parseDouble(strsm1[lengthm1 - 1])) {
size++;
}
}
String value = "";
//step4:重新给value设置值
for (int i = 0; i <= lengthm - 1; i++) {
value += (strsm[i] + ",");
if (i == lengthm - 1) {
value += (size + ",");
}
}
//step5:将产生的包含排序值的数据重新添加到map中
zsPmMap.put(m.getKey(), value);
}
return zsPmMap;
}

/**
* 对数组进行中式拍寻
*/
private Map<Integer,String> sortData(){
//step1: 排序
for(int i = 0; i < datas.length; i ++){
for(int j = 0; j < datas.length; j ++){
if(datas[i] < datas[j]){
int mid = datas[i];
datas[i] = datas[j];
datas[j] = mid;
}
}
}
//step2:先给第一个数第一名的位置,
//step3:再将后面的数与前一个数进行对比,如果大就获取前一个数的排名再加1,如果等于,就去前一个的排名给后面数
Map<Integer,String> dataSort = new HashMap<>();
for(int i = 0; i < datas.length ; i ++){
if(i == 0){
dataSort.put(i,datas[i] + "," + 1);
}else{
if(datas[i] > datas[i-1]){
dataSort.put(i,datas[i] + "," + (Integer.parseInt(dataSort.get(i-1).split(",")[1]) + 1));
}else if(datas[i] == datas[i-1]){
dataSort.put(i,datas[i] + "," + (Integer.parseInt(dataSort.get(i-1).split(",")[1])));
}
}
}

for (Map.Entry<Integer,String> entry : dataSort.entrySet()){
System.out.print(entry.getKey() + ":" + entry.getValue());
System.out.println();
}
return dataSort;
}

JAVA如何实现中式排名和美式排名的更多相关文章

  1. Java实现 蓝桥杯 算法提高 成绩排名

    试题 算法提高 成绩排名 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你, ...

  2. TIOBE:全球编程语言最新排名(Kotlin排名进入前50名)

    作为coder,大家当然关心自己所使用语言的应用趋势.要是几年后所用语言变得默默无闻,那岂不是之前的知识储备与经验积累都会大打折扣.TIOBE排行榜是根据互联网上有经验的程序员.课程和第三方厂商的数量 ...

  3. Sql排名和分组排名

    在很多时候,都有排名这个功能,比如排行榜,并且还需要分页的功能,一般可以再select的时候按照某一字段 oorder by XX desc,这样limit 查找就可以得到排名信息,但是有时候是需要多 ...

  4. python爬虫学习(二):定向爬虫例子-->使用BeautifulSoup爬取"软科中国最好大学排名-生源质量排名2018",并把结果写进txt文件

    在正式爬取之前,先做一个试验,看一下爬取的数据对象的类型是如何转换为列表的: 写一个html文档: x.html<html><head><title>This is ...

  5. SQL Server排名函数与排名开窗函数

    什么是排名函数?说实话我也不甚清楚,我知道 order by 是排序用的,那么什么又是排名函数呢? 接下来看几个示例就明白了. 首先建立一个表,随便插入一些数据. ROW_NUMBER 函数:直接排序 ...

  6. Java实现 蓝桥杯VIP 算法提高 3000米排名预测

    算法提高 3000米排名预测 时间限制:1.0s 内存限制:256.0MB 问题描述 3000米长跑时,围观党们兴高采烈地预测着最后的排名.因为他们来自不同的班,对所有运动员不一定都了解,于是他们分别 ...

  7. HDOJ(HDU) 2093 考试排名(Arrays.sort排序、类的应用)

    Problem Description C++编程考试使用的实时提交系统,具有即时获得成绩排名的特点.它的功能是怎么实现的呢? 我们做好了题目的解答,提交之后,要么"AC",要么错 ...

  8. HDU2093--考试排名

    考试排名 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  9. HDU——2093考试排名(string类及其函数的运用以及istringstream)

    考试排名 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

随机推荐

  1. JS线程机制与事件机制

    JS线程机制与事件机制 1.进程与线程 (1).定义: 进程:程序的一次执行,它占有一片独有的内存空间 CPU的基本调度单位,是程序执行的一个完整的流程 (2).进程与线程的关联 一个进程一般至少有一 ...

  2. 第03组 Alpha冲刺(2/4)

    队名:不等式方程组 组长博客 作业博客 团队项目进度 组员一:张逸杰(组长) 过去两天完成的任务: 文字/口头描述: 制定了初步的项目计划,并开始学习一些推荐.搜索类算法 GitHub签入纪录: 暂无 ...

  3. Python中近期Pandas使用总结

    近期做了很多关于数据处理的问题,发现灵活运用pandas包对于数据分析来说可以轻松好多 导包 import numpy as npimport pandas as pdfrom pandas impo ...

  4. 利用python爬虫爬取图片并且制作马赛克拼图

    想在妹子生日送妹子一张用零食(或者食物类好看的图片)拼成的马赛克拼图,因此探索了一番= =. 首先需要一个软件来制作马赛克拼图,这里使用Foto-Mosaik-Edda(网上也有在线制作的网站,但是我 ...

  5. 运行时异常RuntimeException捕获的小测试

    public class ExceptionTest { public static void main(String[] args) throws InterruptedException { ne ...

  6. 敏捷项目管理—Scrum框架总结

    Scrum中的角色 Scrum Master——项目负责人.项目经理 保护团队不受外界干扰,是团队的领导和推进者,负责提升 Scrum 团队的工作效率,控制 Scrum 中的“检视和适应”周期过程.与 ...

  7. Cesium原理篇:6 Render模块(3: Shader)【转】

    https://www.cnblogs.com/fuckgiser/p/5975274.html 在介绍Renderer的第一篇,我就提到WebGL1.0对应的是OpenGL ES2.0,也就是可编程 ...

  8. win10系统优化方法及chkdsk工具使用

    发现安装了测试版的Win10真的很慢!其实Win10在每次升级后,的确会比老版慢上很多,这只要是因为新增加的安全功能,往往会对系统速度造成拖累.但有很多方法都可以让你的系统运行如飞. http://b ...

  9. spring cloud java: 无法访问redis.clients.jedis.JedisPoolConfig 找不到redis.clients.jedis.JedisPoolConfig的类文件

    spring cloud <spring-cloud.version>Greenwich.SR3</spring-cloud.version> 注入Redis 时候: @Bea ...

  10. google cloud storage products

    https://cloud.google.com/products/storage/ BigTable Cloud Bigtable 是 Google 面向大数据领域的 NoSQL 数据库服务.它也是 ...