0

カウントソートを使用して名前をアルファベット順にソートするのに問題があります。たとえば、アルファベット順にソートし、それに数値入力を追加するとします0001 Alex Smith, Gregory John, Alex Smith, Adam Richard, Alex Ryan。出力は次の順序である必要があります。

アダム・リチャード
アレックス・ライアン
アレックス・スミス
グレゴリー・ジョン

これまでの私のコード:

public class Names 
{
    //private static int[] c;

 public ArrayList<String> getUserInput()
{
        ArrayList<String> names = new ArrayList<String>(); 
    Scanner in = new Scanner(System.in);
    while (in.hasNext()) 
     {
         names.add(in.next());  
        System.out.println(names); 
     }
      in.close();
    return names;
}
 private static CountingSort(int A[], int B[], int k[])
{
    int i;
    int C[0];
    for(i = 0; i <= k; i++){
        C[i]=0;
    }

    for(int j=1; j <= A.length; ){
        C[A[j]] = C[A[j]] + 1;
    }//C[i] now contains numbers of elements equals to i
    for(int i=1; i < k; i++){
        C[i] = C[i] + C[i - 1];

    }
    for(int j = A.length; j--){
    B[C[A[j]]] = A[j];
    C[A[j]] = C[A[j]] - 1;   
   }
}
}
4

2 に答える 2

0

カウント ソートは、この問題に対する不適切なソート アルゴリズムです。カウントソートアルゴリズムは、固定範囲内の整数値をソートするように設計されているため、文字列のソートには適用できません。

一方、この問題には基数ソートを使用できます。基数ソートは、入力を一度に 1 桁または 1 文字ずつソートすることで機能し、文字列のソートに非常に適しています。基数ソートには、最上位桁基数ソートと最下位桁基数ソートの 2 つの一般的な種類があります。基数ソートの MSD フレーバーは、カウント ソートを連想させるものではありませんが、LSD 基数ソートは、一度に 1 文字ずつカウント ソートを使用して機能します。本当にカウンティングソートを使用する必要がある場合は、オプションとして LSD 基数ソートを調査することをお勧めします。

于 2015-08-26T19:34:04.913 に答える