Radix-Sortieralgorithmus

Ich habe einige Algorithmen für das Reverse Engineering erhalten. Der unten stehende Algorithmus ist eine grundlegende Art, aber ich bin sehr verwirrt darüber, was tatsächlich im Code passiert.

Ich bin neu in Algorithmen und bin mir nicht sicher, wie der Code Elemente in einem Array sortiert. Ich bin nicht sicher, welche Bits mit dem Algorithmus zu tun haben und was eine Maske ist. Hier ist der Code:

    ArrayList<Integer> array = CopyArray(a);
    Integer[] zerobucket = new Integer[a.size()];
    Integer[] onebucket = new Integer[a.size()];
    int i, bit;
    Integer element, mask;

    for (bit=0; bit<8; ++bit) {
        int zc = 0;
        int oc = 0;

        for(i=0; i<array.size(); ++i) {
            element = array.get(i);
            mask = 1 << bit;
            if ((element & mask) == 0) {
                zerobucket[zc++] = array.get(i);
            } else {
                onebucket[oc++] = array.get(i);
            }
        }
        for(i=0; i<oc; ++i) array.set(i,onebucket[i]);
        for(i=0; i<zc; ++i) array.set(i+oc,zerobucket[i]);
    }
    return(array);

Antworten auf die Frage(8)

Ihre Antwort auf die Frage