Хоара раздела, как указана в Cormen:Корректность Хоара раздела
Hoare-Partition(A, p, r)
x = A[p]
i = p - 1
j = r + 1
while true
repeat
j = j - 1
until A[j] <= x
repeat
i = i + 1
until A[i] >= x
if i < j
swap(A[i], A[j])
else
return j
при использовании этого в быстрой сортировке, с {1,3,9,8,2,7,5} в качестве входных данных, после того, как первый раздел, получающий {1,3,5,2,8,7,9}, что неверно, поскольку все элементы, меньшие для поворота (здесь 5), должны быть с левой стороны. Может ли кто-нибудь указать на то, что мне не хватает?
Почему инициализируется 'i' на 1 * меньше * чем индекс раздела? –
Где находится этот псевдокод? – templatetypedef
@ScottHunter: поскольку циклы _repeat..until_ loop, поэтому они будут выполнять одну итерацию перед проверкой состояния. Поэтому 'i == p' во время проверки первого условия. –