Quicksort算法不工作,显示10而不是4

时间:2017-09-20 18:39:32

标签: c++

我正在尝试使用quicksort算法对一些二进制文件进行排序。我做了一个合并排序算法,能够在7秒内对10,000,000个数字进行排序。我试图看看quicksort是否会更快地做到这一点,但是,我无法让我的快速通道工作。它正确地对数据进行排序,但它从二进制文件中取出4并将其转换为10。

当我调用quicksort时,我会这样做:Quicksort(size,1,arrayToSort); - 大小是二进制列表的大小,所以它正在改变,我正在测试10个数字,所以它现在是10,代表高,或者h。我使用1代表低,或者因为我从1个基数开始。我将分区和排序功能结合起来只是一个很大的功能。任何想法都会有所帮助,谢谢。

void Quicksort(int h, int l, int *arrayToSort)
{
    int Pivot = arrayToSort[(l + h) / 2];
    arrayToSort[Pivot] = arrayToSort[l];
    int templ = l, temph = h;

    while (true)
    {
        while (arrayToSort[h] > Pivot && l < h)
        {
            h--;
        }
        if (l < h)
        {
            arrayToSort[l] = arrayToSort[h];
            l++;
        }
        else
        {
            arrayToSort[h] = Pivot;
            break;
        }
        while (arrayToSort[l] < Pivot && l < h)
        {
            l++;
        }
        if (l < h)
        {
            arrayToSort[h] = arrayToSort[l];
            h--;
        }
        else
        {
            arrayToSort[l] = Pivot;
            break;
        }
    }
    if (l - templ >= 2)
        Quicksort(h - 1, templ, arrayToSort);
    if (temph - h >= 2)
        Quicksort(temph, l + 1, arrayToSort);
}

1 个答案:

答案 0 :(得分:0)

第一个错误就在这里,你覆盖了Pivot'th位置而不是Pivot的位置。

arrayToSort[Pivot] = arrayToSort[l];