Мне нужно сортировать числа в массиве в порядке возрастания, а моя временная сложность должна быть O (n). Я использую сортировку radix, и это недостаточно быстро. Любые идеи, как я могу сделать свой код быстрее? Вот оно:Slow radix sort in C
void radix(int *a, int n) {
int i;
int sorted[n];
int number = 1;
int biggestNumber = -1;
for(i = 0; i < n; i++){
if(a[i] > biggestNumber)
biggestNumber = a[i]; }
while (biggestNumber/number > 0){
int bucket[10] = { 0 };
for (i = 0; i < n; i++)
bucket[(a[i]/number) % 10]++;
for (i = 1; i < 10; i++)
bucket[i] += bucket[i - 1];
for (i = n - 1; i >= 0; i--)
sorted[--bucket[(a[i]/number) % 10]] = a[i];
for (i = 0; i < n; i++)
a[i] = sorted[i];
number*= 10; } }
Выполняет ли функция? Затем вам следует опубликовать [Обзор кода] (http://codereview.stackexchange.com/tour). –
Вы спрашиваете, как ускорить ваш существующий код, или вы спрашиваете после более эффективного алгоритма сортировки? –
Что значит «недостаточно быстро»? Это как какое-то онлайн-упражнение с ограничением по времени, или как вы определяете «достаточно быстро»? – hyde