незваный гость писал(а):
1) Алгорифмом funQSort() пользоваться не рекомендую. Настойчиво не рекомендую. Он может зациклиться при появлении равных элементов в массиве.
Можно узнать, в какой именно строке он зацикливается?
незваный гость писал(а):
правильно ли я понимаю, что ‹array› — это сортируемый сегмент ‹base›, а ‹middlle› — ‹midd›? Правильно ли я понимаю, что ‹len› — это длина сортируемого сегмента, а не константа?
"array" соответствует "base", "middle" это "midd". Но "len" это именно константа - длина внутренних массивов "count" и "value", "lenF" в алгоритме сортировки - это другая переменная.
Да, смысл теряется, да, есть сортировка слиянием, но ведь вопрос был не в этом, а можно ли избежать появления
при сохранении средней сложности
.
незваный гость писал(а):
Попробуйте покатать свой алгорифм, например, при array[a] = 100 + a. (или -100 + a). Вас ждут сюрпризы.
Ага, ждут. Там ещё и "value" надо нулями инициализировать. Но с другой стороны, такой монотонный рост или убывание несложно и отсечь. Или придумать другой вариант - возможно, с несколькими (фиксированным количеством) проходами по массиву.
Добавлено спустя 42 минуты 6 секунд:незваный гость писал(а):
Правильно ли я понимаю, что Вы используете дополнительную память, пропорциональную длине сортируемого массива?
Нет, это - неверно, там фиксированные массивы. Если бы это было не так, сложность этого добавочного алгоритма уже не была бы
.
Добавлено спустя 21 минуту 37 секунд:
Общая идея такова - любой алгоритм, который за фиксированное чило проходов (или итераций вложенного цикла) сможет найти значение вне "плохого" интервала
, зависящего от
, - подойдёт. Его сложность
сложится с оценкой основного цикла
и получим:
, что с учётом рекурсии даст
.
В данных Вами определениях такая арифметика, похоже, не реализуема. Так что смысла усовершенствований моего опуса вроде и нет.