我正在尝试使用Lomuto分区方案实现Quicksort算法。到处都有一些小错误,但现在它对数组进行排序。
输入为: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
在我看来,“无法解释的行为行”下的任何内容都不应该存在,或者至少日志应显示已使用另一个“开始”和“结束”索引调用了快速排序。此外,如您所见,它开始围绕已排序数组的值开始乱码,实际上并没有终止。
我在Linux上运行它。
我计算了左分区排序和右分区排序的数量,它们的数量相等。 我所寻找的只是对以上情况如何发生的解释。