题目描述
N只小白鼠(1 <= N <= 100),每只鼠头上戴着一顶有颜色的帽子。
现在称出每只白鼠的重量,要求按照白鼠重量从大到小的顺序输出它们头上帽子的颜色。
帽子的颜色用“red”,“blue”等字符串来表示。
不同的小白鼠可以戴相同颜色的帽子。白鼠的重量用整数表示。
输入
多案例输入,每个案例的输入第一行为一个整数N,表示小白鼠的数目。
下面有N行,每行是一只白鼠的信息。第一个为不大于100的正整数,表示白鼠的重量;
第二个为字符串,表示白鼠的帽子颜色,字符串长度不超过10个字符。
注意:白鼠的重量各不相同。
输出
每个案例按照白鼠的重量从大到小的顺序输出白鼠的帽子颜色。
样例输入
3
30 red
50 blue
40 green
样例输出
blue
green
red
代码实现
import java.util.Random;
import java.util.Scanner;
public class Main {
public static int Random_Partition(int a[],String s[],int p,int q) {
//随机选取基准
Random random = new Random();
int i = random.nextInt(q)%(q-p+1) + p;
swap(a,s,q,i);
return partition(a, s, p, q);
}
public static void swap(int a[],String s[],int i,int j) {
//交换函数
int t;
t = a[i];
a[i] = a[j];
a[j] = t;
String temp;
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
public static int partition(int a[],String s[],int p,int q) {
//分区函数,数据分区
int x=a[p];
int i=p;
for(int j=p+1;j<=q;j++) {
if(a[j]<=x) {
i = i+1;
swap(a,s,i,j);
}
}
swap(a,s,p,i);
return i;
}
public static void QuickSort(int a[],String s[],int p,int q) {
//排序函数,递归排序
if(p<q) {
int r = Random_Partition(a, s, p, q);
//基准随机产生
QuickSort(a,s, p, r-1);
QuickSort(a,s, r+1, q);
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n;
while(sc.hasNext()) {
n = sc.nextInt();
int a[] = new int[n];
String s[] = new String[n];
for(int i=0;i<n;i++) {
a[i] = sc.nextInt();
s[i] = sc.next();
}
QuickSort(a, s, 0, n-1);
for(int i=n-1;i>=0;i--) {
System.out.println(s[i]);
}
}
}
}
这题类型其实总体上来说就是排序问题,而快速排序是比较好的办法,修改一下,随机化选取基准,避免最坏情况,然后把字符串类型数组和整数数组要当成一个整体,整数数组排序的时候,字符串数组随之而变化。