我被分配了一些算法来进行逆向工程。下面的算法是基数排序,但我非常困惑代码中实际发生了什么。
我对算法很陌生,不确定代码如何对数组元素进行排序。我不知道比特(bits)与算法有何关系以及掩码(mask)是什么。以下是代码:
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);
Integer
,它们速度慢且浪费内存。请使用int
。 - Has QUIT--Anony-Mousse