Frage

Ich bin studding für eine Prüfung, die über Sortieralgorithmen wird. Ein Freund gab mir diesen Code über LSD Radix Sorting, und ich verstehe nicht, warum er die Nummern 96,97 und 64 mit? Ich habe ein paar Dinge, lesen Sie über LSD Art Radix, aber ich verstand nicht, wie es funktioniert.

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];
            }
        }   
    }
}
War es hilfreich?

Lösung

97 ist der ASCII-Wert für die Buchstaben 'a'. Wenn das Zeichen getestet wird, ist ein Kleinbuchstabe, 96, von seinem ASCII-Wert subtrahiert wird eine Zahl zwischen 1 und 26 geben.

Ansonsten wird der Charakter angenommen ein Großbuchstabe sein. 65 ist der ASCII-Wert für die Buchstaben 'A', so 64 subtrahiert wird wieder einen Wert zwischen 1 und 26 geben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top