快速排序乱序执行

时间:2018-09-29 17:00:02

标签: java algorithm sorting quicksort

我正在尝试使用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上运行它。

我计算了左分区排序和右分区排序的数量,它们的数量相等。 我所寻找的只是对以上情况如何发生的解释。

0 个答案:

没有答案