Быстрая сортировка
От: Аноним  
Дата: 21.11.07 11:59
Оценка:
Быстрая сортировка

Здравствуйте. В книге Кормена про алгоритмы, приведен следующий алгоритм быстрой сортировки на псевдокоде:


Набил это дело на С++
#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;
}

но массив сортируется неправильно.
Где я туплю? Или у Кормена опечатка/ошибка?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.