Похоже, что все в порядке. Но результат говорит о другом. На самом деле, я не знаю, что с ним не так. Может быть, это потому, что я написал это в 2 часа ночи …
РЕДАКТИРОВАТЬ:
template <class T>
void radixSort(T & arr, msize numberBase)
{
long maxValue = findMax(arr);
dynarray<long> tarr(arr,arr.size());
dynarray<long> presenceTable(numberBase+1);
for (register long i=0, max=presenceTable.size(); i<max; ++i)
{
presenceTable[i] = 0;
}
for (register long exp=1; maxValue/exp>0; exp*=numberBase)
{
for (register long i=0, max=tarr.size(); i<max; ++i)
{
++(presenceTable[(tarr[i]/exp)%numberBase]);
}
for (register long i=1, max=presenceTable.size(); i<max; ++i)
{
presenceTable[i] += presenceTable[i-1];
}
for (register long i=0, max=tarr.size(); i<max; ++i)
{
arr[ (--(presenceTable[(tarr[i]/exp)%numberBase])) ] = tarr[i];
}
tarr = arr;
for (register long i=0, max=presenceTable.size(); i<max; ++i)
{
presenceTable[i] = 0;
}
}
}
Задача ещё не решена.
Других решений пока нет …