незваный гость писал(а):
1) Алгорифмом funQSort() пользоваться не рекомендую. Настойчиво не рекомендую. Он может зациклиться при появлении равных элементов в массиве.
Можно узнать, в какой именно строке он зацикливается?
незваный гость писал(а):
правильно ли я понимаю, что ‹array› — это сортируемый сегмент ‹base›, а ‹middlle› — ‹midd›? Правильно ли я понимаю, что ‹len› — это длина сортируемого сегмента, а не константа?
"array" соответствует "base", "middle" это "midd". Но "len" это именно константа - длина внутренних массивов "count" и "value", "lenF" в алгоритме сортировки - это другая переменная.
Да, смысл теряется, да, есть сортировка слиянием, но ведь вопрос был не в этом, а можно ли избежать появления
![$O(n^2)$ $O(n^2)$](https://dxdy-04.korotkov.co.uk/f/3/9/8/3987120c67ed5a9162aa9841b531c3a982.png)
при сохранении средней сложности
![$O(n \log n)$ $O(n \log n)$](https://dxdy-04.korotkov.co.uk/f/f/f/5/ff514eba41c59f90c20d895e8071976382.png)
.
незваный гость писал(а):
Попробуйте покатать свой алгорифм, например, при array[a] = 100 + a. (или -100 + a). Вас ждут сюрпризы.
Ага, ждут. Там ещё и "value" надо нулями инициализировать. Но с другой стороны, такой монотонный рост или убывание несложно и отсечь. Или придумать другой вариант - возможно, с несколькими (фиксированным количеством) проходами по массиву.
Добавлено спустя 42 минуты 6 секунд:незваный гость писал(а):
Правильно ли я понимаю, что Вы используете дополнительную память, пропорциональную длине сортируемого массива?
Нет, это - неверно, там фиксированные массивы. Если бы это было не так, сложность этого добавочного алгоритма уже не была бы
![$O(n)$ $O(n)$](https://dxdy-02.korotkov.co.uk/f/1/f/0/1f08ccc9cd7309ba1e756c3d9345ad9f82.png)
.
Добавлено спустя 21 минуту 37 секунд:
Общая идея такова - любой алгоритм, который за фиксированное чило проходов (или итераций вложенного цикла) сможет найти значение вне "плохого" интервала
![$\delta n$ $\delta n$](https://dxdy-01.korotkov.co.uk/f/c/e/5/ce538a951664939a0a9e59e0dcbeb90682.png)
, зависящего от
![$n$ $n$](https://dxdy-02.korotkov.co.uk/f/5/5/a/55a049b8f161ae7cfeb0197d75aff96782.png)
, - подойдёт. Его сложность
![$O(an)$ $O(an)$](https://dxdy-02.korotkov.co.uk/f/1/4/5/14534f23950b135878dbadfdd044b65882.png)
сложится с оценкой основного цикла
![$O(bn)$ $O(bn)$](https://dxdy-02.korotkov.co.uk/f/d/1/2/d128d648888ad203497457a6b2f1c28782.png)
и получим:
![$O(a n) + O(b n) = O((a + b) n) = O(n)$ $O(a n) + O(b n) = O((a + b) n) = O(n)$](https://dxdy-03.korotkov.co.uk/f/a/4/1/a41b50dd3157d3dd356e5a231a74e09382.png)
, что с учётом рекурсии даст
![$O(n \log n)$ $O(n \log n)$](https://dxdy-04.korotkov.co.uk/f/f/f/5/ff514eba41c59f90c20d895e8071976382.png)
.
В данных Вами определениях такая арифметика, похоже, не реализуема. Так что смысла усовершенствований моего опуса вроде и нет.