Hoare分区的严格定义?

时间:2014-11-10 17:01:59

标签: c++ algorithm quicksort partitioning

所以我今天和我的CS教授讨论了一下我的快速排序算法中的分区功能是否属于Hoare分区。根据她的说法,实现Hoare分区的方法只有一种,其他一切都是错误的。

这让我想知道,Hoare分区真的有一个特定的定义吗?我总是假设Hoare分区是使用Tony Hoare开发的方法排序的任何分区算法(即两个迭代器以相反的方向遍历列表);我认为算法的确切实现并不重要。这是正确的,还是只有一个"正确"实现Hoare算法的方法。

这是我的分区算法:

template <typename T>
int partArray(T* array, int leftIndex, int rightIndex)
{
    int pivot = leftIndex, middle = (leftIndex + rightIndex) / 2, leftIterator = leftIndex + 1, rightIterator = rightIndex;

    //Move median element into pivot position
    if (array[leftIndex] > array[rightIndex])
        SWAP(array[leftIndex], array[rightIndex]);
    if (array[middle] > array[rightIndex])
        SWAP(array[middle], array[rightIndex]);
    if (array[middle] > array[leftIndex])
        SWAP(array[middle], array[leftIndex]);

    //Partition array using Hoare's algorithm
    while (true)
    {
        while (array[leftIterator] <= array[pivot] && leftIterator < rightIndex) leftIterator++;
        while (array[rightIterator] >= array[pivot] && rightIterator > leftIndex) rightIterator--;
        if (leftIterator < rightIterator)
            SWAP(array[leftIterator], array[rightIterator]);
        else
            break;
    }
    SWAP(array[pivot], array[rightIterator]);

    //Return final position of pivot
    return rightIterator;
}

0 个答案:

没有答案