小白鼠

题目描述

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]);
		    }
		}
	}
}

这题类型其实总体上来说就是排序问题,而快速排序是比较好的办法,修改一下,随机化选取基准,避免最坏情况,然后把字符串类型数组和整数数组要当成一个整体,整数数组排序的时候,字符串数组随之而变化。

发布了12 篇原创文章 · 获赞 1 · 访问量 230

猜你喜欢

转载自blog.csdn.net/qq_46546793/article/details/105226533