-4

カウントソートを使用して配列の要素をソートするためのこのコードを書きました。プログラムはコンパイルおよび実行されますが、正しい出力が得られません。要素が非減少順でソートされることを期待しています。取得している出力は減少しない順序でソートされていますが、値は入力したものと同じではありません。コードを何度も確認しましたが、エラーを見つけることができません。助けてください。

import java.io.*;

public class Main {
public static void main(String aa[]) {

    try {
        BufferedReader input = new BufferedReader(new InputStreamReader(System.in));

        int t = Integer.parseInt(input.readLine());
        int a [] = new int[t];
        int c [] = new int[t];
        int max = 0;

        if(t<=1000000) {

            for(int i = 0; i<t; i++) {
                int n = Integer.parseInt(input.readLine());
                if(n>=0 && n<=1000000) {
                    a[i] = n;
                    if(n>max) max = n;
                }
            }

            int b[] = new int[max+1];

            for(int i = 0; i<max+1; i++)
                b[i] = 0;

            for(int i = 0; i<t; i++)
                b[a[i]] += 1;

            for(int i = 1; i<max+1; i++)
                b[i] += b[i-1];

            for (int i = t-1; i>=0; i--) {
                c[b[a[i]]] = a[i];
                b[a[i]]--;
            }

            for (int i = 0; i<t; i++) 
                System.out.println(c[i]);

        }
        else 
            System.exit(0);
    } catch (Exception e) {System.out.println(e);}
  }
}
4

3 に答える 3

2

ほとんど正解です。次の行を変更します (1 つのエラーでオフになります)

for (int i = 0; i < t; i++) {
    c[b[a[i]] - 1] = a[i];
    b[a[i]]--;
}
于 2013-08-25T16:46:06.550 に答える