質問

私はアルゴリズムをソートするぐらいでしょう試験のために間柱ています。 A友達は私にLSD基数ソートについては、このコードを与えた、と彼は番号96,97および64を使用している理由を私は理解していませんか? LSDは、ソート基数については、私はいくつかのことを読んだが、私はそれがどのように動作するかを理解していませんでした。

public class LSDRadix {
    private static String[] list;

    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        int n = Integer.parseInt(sc.nextLine().trim());

        int size=0;
        list =new String[n];

        for(int i=0; i<n; i++){
            list[i]= sc.nextLine();

            if(size < list[i].length()){
                size = list[i].length();
            }
        }
        sort(size);

        for(int j=0; j<n;j++)
            System.out.println(list[j]);
    }

    private static void sort(int sizes){
        int numChars = 58;
        String [] aux = new String[list.length];
        int[] counter;

        for(int i=sizes-1; i>=0 ;i--){       
            counter = new int[numChars];

            for(int j=0; j<list.length; j++){
                if(list[j].length() > i){
                    if(list[j].charAt(i) >= 97)
                        counter[list[j].charAt(i)-96]++;
                    else
                        counter[list[j].charAt(i)-64]++;
                }else{
                    counter[0]++;
                }
            }

            for(int j=0; j<numChars-1; j++){
                counter[j+1] += counter[j]; 
            }

            for(int j=list.length-1; j>=0; j--){
                if(list[j].length() > i){
                    int pos;
                    if(list[j].charAt(i) >= 97){
                        pos = list[j].charAt(i)-96;
                    }else{
                        pos = list[j].charAt(i)-64;
                    }
                    aux[counter[pos]-1] = list[j];
                    counter[pos]--;
                }else{
                    aux[counter[0]-1] = list[j];
                    counter[0]--;
                }
            }

            for(int j=0; j<list.length; j++){
                list[j] = aux[j];
            }
        }   
    }
}
役に立ちましたか?

解決

は97「」の文字のASCII値です。試験された文字が小文字である場合、そのASCII値から96を減算すると、1と26の間の数を与える。

はそうでない場合、文字は大文字であると仮定されます。 64を減算すると、再び1と26の間の値を与えるように、65は、文字「A」のASCII値である。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top