题目描述
查找和排序
题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩
都按先录入排列在前的规则处理。
例示:
jack 70
peter 96
Tom 70
smith 67
从高到低 成绩
peter 96
jack 70
Tom 70
smith 67
从低到高
smith 67
Tom 70
jack 70
peter 96
输入描述:
输入多行,先输入要排序的人的个数,然后输入排序方法0(降序)或者1(升序)再分别输入他们的名字和成绩,以一个空格隔开
输出描述:
按照指定方式输出名字和成绩,名字和成绩之间以一个空格隔开
示例1
输入
3
0
fang 90
yang 50
ning 70
输出
fang 90
ning 70
yang 50
**这是一道考研题,使用传统的字符串形式,根据分数高低进行排序,可以实现。也可以根据C++里面的map列表进行排序,还可以根据java里面的集合中的list和map来做。
试着用了一下,java里面的list列表和map做了一下,发现用list比用map简单一些。
list版**
package com.link;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
class student
{
public String name;
public int score;
public student(String name,int score)
{
this.name=name;
this.score=score;
}
}
public class Test
{
public static void main(String [] args)
{
Scanner sc=new Scanner(System.in);
while(sc.hasNext())
{
int num=sc.nextInt();
int option=sc.nextInt();
List<student> list=new ArrayList<student>();
for(int i=0;i<num;i++)
{
list.add(new student(sc.next(),sc.nextInt()));
}
//Collections集合排序
if(option==1)
{
Collections.sort(list,new Comparator<student>()
{
public int compare(student o1,student o2)
{
//升序
return o1.score-o2.score;
}
});
}
else if(option==0)
{
Collections.sort(list,new Comparator<student>()
{
public int compare(student o1,student o2)
{
//降序
return o2.score-o1.score;
}
});
}
for(int i=0;i<list.size();i++)
{
System.out.println(list.get(i).name+" "+list.get(i).score);
}
}
}
}
map方法:
package com.map;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Main {
public static void main(String[] args) {
Map<String,Integer> ms=new TreeMap<String,Integer>();
Scanner s=new Scanner(System.in);
int m=s.nextInt();
int sel=s.nextInt();
int i=1;
while(i<=m)
{
String s1=s.next();
int s2=s.nextInt();
ms.put(s1, s2);
i++;
}
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(ms.entrySet());
if(sel==1)
{
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
//升序
return o1.getValue()-o2.getValue();
}
});
}
else if(sel==0)
{
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
//降序
return o2.getValue()-o1.getValue();
}
});
}
for (int j=0;j< list.size(); j++) {
Map.Entry<String, Integer> map = list.get(j);
System.out.println(map.getKey()+" "+map.getValue());
}
}
}