Мне дали некоторые алгоритмы для обратной инженерии. Алгоритм ниже - это сортировка radix, но я очень смущен тем, что на самом деле происходит в коде.Алгоритм сортировки Radix
Я новичок в алгоритмах и не уверен, как код сортирует элементы в массиве. Я не уверен, какие биты имеют отношение к алгоритму и какова маска. Вот код:
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'. –