Java 什么';下面的计数排序程序有什么问题?

Java 什么';下面的计数排序程序有什么问题?,java,counting-sort,Java,Counting Sort,这是我的计数排序程序: public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int arr[] = new int[n]; int b[] = new int[n+1]; for (int i = 0; i < n; i++) { arr[

这是我的计数排序程序:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int arr[] = new int[n];
        int b[] = new int[n+1];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        int c[] = new int[100];
        for (int i = 1; i < 100; i++) {
            c[i] = 0;
        }
        for (int i = 1; i < n; i++) {
            c[arr[i]] = c[arr[i]] + 1;
        }
        for (int i = 1; i < 100; i++) {
            c[i] = c[i] + c[i - 1];
        }
        for (int i = n-1; i > 0; i--) {
            b[c[arr[i]]] = arr[i];
            c[arr[i]] = c[arr[i]] -1;
        }
        for (int i = 1; i < n; i++) {
            System.out.print(b[i] + " ");
        }
    }
publicstaticvoidmain(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
int arr[]=新的int[n];
int b[]=新int[n+1];
对于(int i=0;i0;i--){
b[c[arr[i]]=arr[i];
c[arr[i]]=c[arr[i]]-1;
}
对于(int i=1;i
输入:

100
63 25 73 1 98 73 56 84 86 57 16 83 8 25 81 56 9 53 98 67 99 12 83 89 80 91 39 86 76 74 39 90 90 10 94 32 44 3 89 30 79 46 96 27 32 18 21 92 69 40 34 68 78 24 87 42 23 41 78 22 6 90 90 99 50 20 1 43 70 95 33 46 44 48 36 60 82 67 61 32 79 75 13 87 33

预期输出:

1 1 3 3 6 8 9 9 10 12 13 16 18 20 21 21 22 23 24 25 25 27 30 32 33 34 39 40 40 41 42 44 46 48 50 53 56 57 59 60 61 65 67 68 69 70 70 73 74 75 76 78 79 80 81 82 83 83 84 86 87 89 90 91 92 95 96 98 99

实际输出:

1 1 3 3 6 8 9 9 10 12 13 16 16 18 20 21 21 22 23 24 25 25 27 30 32 33 34 39 40 40 41 42 44 46 48 50 53 56 57 59 60 65 67 68 69 69 70 70 73 74 75 76 78 79 79 80 81 82 83 83 84 86 87 89 90 91 92 95 96 98 99


我得到的输出缺少一个数字
63
。我无法纠正此问题。

您从1开始迭代,而不是从0开始迭代,因此您错过了第一个数字,即63

for (int i = 1; i < n; i++) {
    c[arr[i]] = c[arr[i]] + 1;
}
for(int i=1;i

在最后一个循环中,当
i>0
时中断,而不是
i>=0

您不能使用调试器并找出答案吗?代码应该做什么(我的意思是不确定每个人都得到“计数排序”)?@RC。我试过了,但没能找出原因