Если вы проверите быструю сортировку алгоритма, вы обнаружите, как массив делится на два среза, которые не перекрываются, но также не оставляют ни одного элемента. Вы делаете это, просто между двумя срезами, вы оставляете один элемент. Вы делите массив на два среза и один элемент массива, который не участвует в рекурсивных вызовах других срезов .... и это неверно. То, что вы знаете, это то, что все элементы нижнего среза меньше токена, а остальные больше или равны токену ... но точкой деления может быть любой элемент из соответствующей части массива.
Кстати, код или раздел совершенно неверный. Сначала вы выбираете один элемент, который будет действовать как токен, вы можете выбрать его как любой элемент массива или как среднее значение для всех из них, это не имеет значения ... вы не собираетесь помещать его в массив , затем поиск по конечным элементам, которые находятся под массивом, и поиск по начальным элементам, которые находятся над токеном, если у вас есть одна такая пара, переключите их, но вы обмениваетесь найденными элементами с токеном, который не только не делать то, что ожидается, но вводит копии токена (и изменяет его значение), который будет sh вашего массива.
Вы не ищете элемент массива ... вы ищете место (между соседними элементами), где разделить ваш массив, и подмассивы будут от начала, до пос-1 и от пункта к концу (или от начала до пункта, затем от пункта + 1 до конца), но не игнорируйте центральный элемент, потому что вы знаете, что он принадлежит массиву, но токен не нужен.