Java/C++ P1271【深基9.例1】选举学生会(计数排序)

题目描述
学校正在选举学生会成员,有 n(n\le 999)n(n≤999) 名候选人,每名候选人编号分别从 1 到 nn,现在收集到了 m(m<=2000000)m(m<=2000000) 张选票,每张选票都写了一个候选人编号。现在想把这些堆积如山的选票按照投票数字从小到大排序。输入 nn 和 mm 以及 mm 个选票上的数字,求出排序后的选票编号。

输入格式

输出格式

输入输出样例
输入 #1复制
5 10
2 5 2 2 5 2 2 2 1 2
输出 #1复制
1 2 2 2 2 2 2 2 5 5

Java(由于时间限制没过, 改成C++)



import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] nums = new int[m];
        for(int i = 0; i < m; i++) {
            nums[i] = sc.nextInt();
        }
        //计数排序
        //找到最大和最小的
        int min = Integer.MAX_VALUE;
        int max = Integer.MIN_VALUE;
        for(int i = 0; i < m; i++) {
            min = Math.min(nums[i], min);
            max = Math.max(nums[i], max);
        }
        int[] arr = new int[max - min + 1];
        for(int i = 0; i < m; i++) {
            arr[nums[i] - min]++;
        }
        for(int i = 0; i < arr.length; i++) {
            int k = arr[i];
            while (k > 0) {
                System.out.print((i + min) + " ");
                k--;
            }
        }
    }
}

C++

#include
using namespace std;
int n, m, i, a;
int nums[1000];
int main()
{
	cin>>n>>m;
	for(i = 0; i < m; i++) {
		cin>>a;
		++nums[a];
	}
	for(i = 0; i < 1000; i++) {
		while(nums[i]--) {
			cout<

你可能感兴趣的:(Java,排序算法,洛谷)