分区排序问题

时间:2017-04-09 16:19:23

标签: c++

我正在尝试快速排序。但我有一些问题。它应该改变这个数组:

{ 1,9,8,7,6,5,4,3,2,10 }

当它收到参数left = 0, right = 4 and pivotIndex = 2时,对此:

{ 7,6,1,8,9,5,4,3,2,10 }

但实际上它正在将数组改为这个:

{ 1,6,7,8,9,5,4,3,2,10 }

如果我尝试对这个数组进行分区,我也会遇到这个问题:

{ 7,6,1,8,9,5,4,3,2,10 }
带参数right = 9, left = 4 and pivotIndex = 2

到这个数组:

{ 7,6,1,8,9,2,3,5,4,10 }

我实际上正在改变这个数组:

{ 7,6,1,8,9,2,3,10,5,4 }

代码:

int QS::partition(int left, int right, int pivotIndex)
{

    if (my_array == NULL)
        return -1;
    if (elements <= 0 || capacity <= 0)
        return -1;
    if (left < 0 || right < 0)
        return -1;
    else if (right - left <= 1)
        return -1;
    if (right > elements - 1)
        return -1;
    if (!(pivotIndex <= right) || !(pivotIndex >= left))
        return -1;
    int first = pivotIndex;
    int last;
    if (first == right)
       last = left;
    else
       last = right;
    int up = first + 1;
    int down = last - 1;

    do{
        while (!(up != last - 1) || !(my_array[up] <= my_array[first]))
            up++;
        while (!(my_array[down] > my_array[first]) || !(down != first))
            down--;
        if (up < down)
            swap(up, down);
    } while (up < down);

    swap(first, down);


    return down;
}

有人告诉我使用这个算法:

enter image description here

但我无法使用这个算法,我得到的结果最接近我得到的结果,是我给你们看的代码。

任何人都可以帮助我吗?谢谢。

0 个答案:

没有答案