У меня есть код для быстрой сортировки на C++, который отлично работает для массива неповторимых элементов. Я уверен, что многие люди здесь это знают, но кто это понимает? Позвольте мне объяснить себя лучше. Это код:Я не понимаю эту быструю сортировку
void quicksort(int a[], int first, int last){
int i,j;
int pivot;
if((last -first + 1) <= 1) return;
pivot = a[(first+last)/2];
i = first;
j = last;
while(i <= j){
while(a[i] < pivot) i++;
while(a[j] > pivot) j--;
if(i <= j){
//SWAP
int temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j--;
}
}
quicksort(a, first, j);
quicksort(a,i, last);
}
Итак, я понимаю все, кроме если на свопе. Может ли кто-нибудь сказать мне, математически, каков точный случай или множество случаев, когда i> j после двух внутренних ударов? Я знаю конкретные случаи для этого, но для чего это математическое (или точное) свойство для них?
Извините за дерьмовый английский и спасибо.
PD: Игнорируйте в этом случае оптимизацию, или выбирая стержень и все это.
Это похоже на код C, а не на C++? –
Я думаю, что функция подкачки от C++, не так ли? – Carrascado
В C++ существует 'std :: swap', но, не видя остальной части кода, трудно понять, что здесь используется реализация swap. –