Похоже, вы на правильном пути. Вы берете ввод в A
, находите наибольшее значение, с которым будете иметь дело, а затем убедитесь, что вы обнулили столько значений в вашем массиве C
. Но вот когда все начинает идти не так. Затем вы делаете:
for (i = 0; i < k; ++i)
{
C[i] += C[i - 1];
}
for (j = n; j > 0; --j)
{
B[C[A[j]]] = A[j];
C[A[j]] -= 1;
}
Этот первый цикл всегда выходит за пределы на первой итерации (C[i-1]
, когда i=0
будет неопределенным поведением), но даже если это не так, я не уверен, что вы имеете в виду. Или в цикле после этого.
Вместо этого на вашем месте я бы создал переменную indx
, чтобы отслеживать, к какому индексу я собираюсь вставить число (сколько чисел я уже добавил), а затем я Зацикливался бы на C
, и для каждого значения в C
я бы зацикливался столько раз и вставлял столько значений этого индекса. Мое объяснение может звучать немного многословно, но это будет выглядеть так:
int indx = 0;
for(int x = 0; x <= k; x++) {
for(int y = 0; y < C[x]; y++) {
B[indx++] = x;
}
}
Если вы замените две вышеуказанные петли этой, тогда все должно работать как положено.
Смотрите живой пример здесь: ideone