См. Этот псевдокод для поиска по месту (из Википедии):
function partition(array, left, right, pivotIndex)
pivotValue := array[pivotIndex]
swap array[pivotIndex] and array[right] // Move pivot to end
storeIndex := left
for i from left to right - 1 // left ≤ i < right
if array[i] ≤ pivotValue
swap array[i] and array[storeIndex]
storeIndex := storeIndex + 1
swap array[storeIndex] and array[right] // Move pivot to its final place
return storeIndex
Обратите внимание, что он проходит по всему массиву (кроме последнего индекса).Поворот не поменялся местами до конца.В вашем коде значение сводки постоянно меняется в цикле, который кажется неправильным.
Каждый раз, когда происходит своп, цель подкачки (storeIndex выше) должна меняться.
Также вам нужно толькопоменять местами значения ниже, чем шарнир влево.Если все низкие значения находятся слева, то высокие значения окажутся справа.