为什么此快速排序功能不起作用?

问题描述:

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 
} 

我不知何故必须在那里得到这个“cmp”,但我不知道在哪里以及如何。 Person *是一个指向struct Person btw的指针。为什么此快速排序功能不起作用?

+0

*是不是一个地方转储你的作业问题 – recurf

+0

好吧,你知道我可以愚蠢我的作业问题的地方吗? – NoIdea

您需要学习使用调试器。没有这个,你就迷路了。用调试器运行你的代码,并检查代码做了什么你不期望的东西。

我想这几行:

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

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

+0

谢谢你的回答。我不认为我目前应该使用调试器。我知道代码不起作用,我根本没有使用比较器,正如我在我的问题中指出的那样。我只是不知道如何在那里建立它。我想我对编程太愚蠢了。 – NoIdea