у меня есть два сомнения по поводу алгоритма подсчета сортировки:Confused о сложности подсчета сортировки алгоритма
Как это только
O(n)
сложность? В алгоритме имеется 5 циклов. Должна ли сложность для каждого цикла быть n? Так результат вn^4
сложности? Я знаю, что я ошибаюсь, и подсчет сортировки является линейным, но я хочу знать, почему мои рассуждения ошибочны.Если алгоритм подсчета сортировки является линейным, почему
O(n+K)
и не толькоO(n)
, еслиK
добавляется она не линейна больше прав?
Это код счета рода я имею в виду тоже:
void countSort(char *str)
{
// The output character array that will have sorted str
char output[strlen(str)];
// Create a count array to store count of inidividul characters and
// initialize count array as 0
int count[RANGE + 1], i;
memset(count, 0, sizeof(count));
// Store count of each character
for(i = 0; str[i]; ++i)
++count[str[i]];
// Change count[i] so that count[i] now contains actual position of
// this character in output array
for (i = 1; i <= RANGE; ++i)
count[i] += count[i-1];
// Build the output character array
for (i = 0; str[i]; ++i)
{
output[count[str[i]]-1] = str[i];
--count[str[i]];
}
// Copy the output array to str, so that str now
// contains sorted characters
for (i = 0; str[i]; ++i)
str[i] = output[i];
}
Петли не вложены. –