Быстрая сортировка
Здравствуйте. В книге Кормена про алгоритмы, приведен следующий алгоритм быстрой сортировки на псевдокоде:
Набил это дело на С++
#include <iostream>
namespace quick
{
typedef int elem_type;
void swap(elem_type& a, elem_type& b)
{
elem_type temp = a;
a = b;
b = temp;
}
int hoare_partition(elem_type A[], int left, int right)
{
elem_type pivot = A[left];
int i = left - 1;
int j = right + 1;
while(true)
{
do
{
--j;
}
while(A[j] > pivot);
do
{
++i;
}
while(A[i] < pivot);
if(i < j)
swap(A[i], A[j]);
else
return j;
}
}
void quicksort(elem_type A[], int left, int right)
{
if(left < right)
{
int pivot = hoare_partition(A, left, right);
quicksort(A, left, pivot - 1);
quicksort(A, pivot + 1, right);
}
}
void quicksort(elem_type A[], int size)
{
quicksort(A, 0, size - 1);
}
void dump(elem_type A[], int size)
{
for(int i = 0 ; i < size ; ++i)
{
std::cout << A[i] << " ";
}
std::cout << std::endl;
}
}
int main(int, char**)
{
quick::elem_type Array[] = { 5, 2, 6, 8, 0, 1, 3, 2, 9, 4 };
int size = sizeof(Array) / sizeof(Array[0]);
quick::quicksort(Array, size);
quick::dump(Array, size); // 0 2 2 3 4 1 5 6 8 9
return 0;
}
но массив сортируется неправильно.
Где я туплю? Или у Кормена опечатка/ошибка?