java - 快速排序乱序执行
问题描述
我正在尝试使用 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
在我看来,“无法解释的行为行”下的任何内容都不应该存在,或者至少日志应该显示已使用另一个“开始”和“结束”索引调用了快速排序。此外,正如您所看到的那样,它开始围绕已经排序的数组的值进行洗牌,并且实际上并没有终止。
我在 Linux 上运行它。
我计算了左侧分区排序和右侧分区排序的数量,它们的数量相等。我正在寻找的只是对上述情况如何发生的解释。
解决方案
推荐阅读
- sql-server - 有没有办法增加与 AWS RDS 的连接数量
- excel - 从 2 个工作簿复制到 1 个工作簿
- forms - 如何在 FormType.php Symfony 4 中更改输入“id”
- java - 如果每个子类型都具有独特的属性,那么让不同子类型进行合作的正确方法
- javascript - 尝试设置状态道具并将其传递给组件时“无法读取未定义的属性'状态'”
- javascript - 什么语法最适合用于内部具有一项功能的 if 语句?
- bash - Bash - 用于切割字段不同间距的分隔符
- elasticsearch - Elasticsearch - 一个查询的每个索引计数
- c++ - QT 多线程 - 从 mainwindow.cpp 中的线程内调用函数
- javascript - 如何使用删除子项删除特定的附加子项?