2016-12-15 9 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.Почему эта функция quicksort не работает?

+0

StackOverflow не является местом для сбрасывания домашних заданий – recurf

+0

ok, вы знаете место, где я могу глупо задавать домашние вопросы? – NoIdea

ответ

0

Вам нужно научиться использовать отладчик. Без этого вы потерялись. Запустите свой код с помощью отладчика и проверьте, где код делает то, чего вы не ожидаете.

Я полагаю, эти строки:

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

не будет делать то, что вы ожидаете. Это больше похоже на вопрос «почему вы думаете, что это может когда-либо работать», а не «почему это не работает». Тем более, что вы, похоже, не используете компаратор вообще.

+0

Благодарим вас за ответ. Я не думаю, что я должен использовать отладчик на данный момент. Я знаю, что код не работает и что я не использовал компаратор вообще, как я указал в моем вопросе. я просто понятия не имею, как его построить там. Наверное, я слишком глуп для программирования. – NoIdea