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。
的指针答案 0 :(得分:0)
您需要学习使用调试器。没有它,你就迷失了。使用调试器运行代码,并检查代码在哪里执行您不期望的操作。
我想这些行:
for (int i = left + 1; i <= right; i++) {
if (i < left) {
不会做你期望的。它看起来更像是“为什么你认为这可能有用”,而不是“为什么它不起作用”。特别是因为你似乎根本没有使用比较器。