Я пытаюсь реализовать алгоритм быстрой сортировки с помощью схемы разбиения Lomuto.Было несколько ошибок здесь и там, но сейчас он сортирует массив.
Ввод: 3 4 15 1.
Проблема в том, что он не завершается, и даже более странный эффектэто тот код, который выглядит так:
public void quickSort(int start, int end) {
System.out.println("Quicksorting...\n Start: " + start + " End: " + end);
System.out.println("Is start<end: " + (start < end ? "true" : "false") + "!!!!!!!!!!");
while (start < end) {
System.out.println("In case: (start:end) = " + start + "; " + end);
partitionPoint = partition_lomuto(start, end);
System.out.println("partition point: " + partitionPoint);
System.out.println("\n\nCalling quickSort left...");
quickSort(start, partitionPoint); // On left of the pivot.
System.out.println("\n\nCalling quickSort right...");
quickSort(partitionPoint+1, end); // On right of the pivot.
}
System.out.println("Cancel qs call");
}
Выполняется (на первый взгляд) так:
Calling quickSort right...
Quicksorting...
Start: 3 End: 3
Is start<end: false!!!!!!!!!!
Cancel qs call
In case: (start:end) = 2; 3 // UNEXPLAINABLE BEHAVIOUR LINE
1 3 15 4
partition point: 2
По моему мнению, ничего в рамках "НЕОБЪЕКТИВНОЙ ЛИНИИ ПОВЕДЕНИЯ" не должно существовать,или, по крайней мере, журнал должен показать, что быстрая сортировка была вызвана с другими индексами 'start' и 'end'.Кроме того, как вы можете видеть в этот момент, он начинает перетасовывать значения уже отсортированного массива и действительно не завершается.
Я запускаю это в Linux.
Я посчитал числоСортировка по левому разделу и по правому разделу, и они равны по количеству.Все, что я ищу, - это объяснение того, как это может произойти.