C ++ QuickSort无法正常工作

时间:2012-05-23 07:45:21

标签: c++ algorithm quicksort

我正在尝试修改一些QuickSort代码,以随机数作为支点。

但是,在测试程序时,它没有正确排序。我不确定为什么会这样做。

int random (int num) {
    int random = rand() % (num - 1);
    return random;
}

int* partition (int* first, int* last);
void quickSort(int* first, int* last) {
    if (last - first <= 1) return;

    int* pivot = partition(first, last);
    quickSort(first, pivot);
    quickSort(pivot + 1, last);
}

int* partition (int* first, int* last) {
    //--int pivot = *(last - 1);    
    int* pos = (first + random(last - first));
    int pivot = *pos;
    int* i = first;
    int* j = last - 1;

    for (;;) {
        while (*i < pivot && i < last) i++;
        while (*j >= pivot && j > first) j--;
        if (i >= j) break;
        swap (*i, *j);
    }
    swap (*pos, *i);
    return i;
}

1 个答案:

答案 0 :(得分:0)

您的first implementation工作但具有特定数据集的退化行为。原始工作代码中的数据透视表为*(last - 1),因此最简单的修复方法是将随机元素与*(last - 1)交换。原始分区代码的其余部分将保持不变。