2016-12-15 49 views
-2
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

StackOverflow是不是一個地方轉儲你的作業問題 – recurf

+0

好吧,你知道我可以愚蠢我的作業問題的地方嗎? – NoIdea

回答

0

您需要學習使用調試器。沒有這個,你就迷路了。用調試器運行你的代碼,並檢查代碼做了什麼你不期望的東西。

我想這幾行:

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

不會做你期望的。它看起來更像是一個「爲什麼你會認爲這可能會奏效」的問題,而不是「爲什麼它不起作用」。特別是因爲你似乎根本沒有使用比較器。

+0

謝謝你的回答。我不認爲我目前應該使用調試器。我知道代碼不起作用,我根本沒有使用比較器,正如我在我的問題中指出的那樣。我只是不知道如何在那裏建立它。我想我對編程太愚蠢了。 – NoIdea