为什么这个quicksort功能不起作用?

时间:2016-12-15 12:38:01

标签: quicksort swap comparator

void swap(Person* a, int i, int j) {
    Person b;
    b = a[i];
    a[i] = a[j];
    a[j] = b;
}


void quicksort(Person* a, int left, int right, PersonComparator cmp) {
    if (left >= right) return; // 0 or 1 elements, recursion end
    swap(a, left, (left + right) / 2); // move pivot element to left
    int j = left;
    for (int i = left + 1; i <= right; i++) {
        if (i < left) {
            swap(a, ++j, i);
    }
    // assert: v[i] < v[left] for i = left+1..j
}
swap(a, left, j); // move back pivot element
quicksort(a, left, j-1, cmp); // assert: v[i] < v[j] for i = left..j-1
quicksort(a, j+1, right, cmp); // assert: v[i] >= v[j] for i = j+1..right
}

我不得不得到这个&#34; cmp&#34;在那里,但我不知道在哪里和如何。 Person *是指向结构Person btw。

的指针

1 个答案:

答案 0 :(得分:0)

您需要学习使用调试器。没有它,你就迷失了。使用调试器运行代码,并检查代码在哪里执行您不期望的操作。

我想这些行:

for (int i = left + 1; i <= right; i++) {
    if (i < left) {

不会做你期望的。它看起来更像是“为什么你认为这可能有用”,而不是“为什么它不起作用”。特别是因为你似乎根本没有使用比较器。