Description
实现计数排序,通过多次遍历数组,统计比每一个元素小的其它元素个数,根据该统计量对数据进行排序。
Input
输入的每一行表示一个元素为正整数的数组,所有值用空格隔开,第一个值为数值长度,其余为数组元素值。
Output
输出的每一行为排序结果,用空格隔开,末尾不要空格。
Sample Input 1
13 24 3 56 34 3 78 12 29 49 84 51 9 100
Sample Output 1
3 3 9 12 24 29 34 49 51 56 78 84 100
package org.alphacat.first;
import java.util.Scanner;
public class CountSort {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
int n = scan.nextInt();
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = scan.nextInt();
}
problem(arr);
}
}
static void problem(int[] arr) {
int[] ans = solution(arr);
print(ans);
}
static int[] solution(int[] arr) {
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
max = Math.max(max, arr[i]);
}
int[] count = new int[max + 1];
for (int num : arr) {
++count[num];
}
int index = 0;
for (int i = 0; i <= max; i++) {
for (int j = 0; j < count[i]; j++) {
arr[index++] = i;
}
}
return arr;
}
private static void print(int[] arr) {
StringBuilder sb = getStringBuilder(arr);
System.out.print(sb.toString());
}
private static void println(int[] arr) {
StringBuilder sb = getStringBuilder(arr);
System.out.println(sb.toString());
}
private static StringBuilder getStringBuilder(int[] arr) {
int n = arr.length;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(arr[i]);
if (i != n - 1) {
sb.append(" ");
}
}
return sb;
}
}