Quicksort Java代码进入无限循环

时间:2017-03-16 11:59:22

标签: java sorting data-structures quicksort

当我尝试运行下面的快速排序代码时,它会进入无限循环。最后一次迭代将进入无限循环。

button.translatesAutoresizingMaskIntoConstraints = false
button.imageView?.translatesAutoresizingMaskIntoConstraints = false

请在出错的地方提供帮助。

3 个答案:

答案 0 :(得分:5)

使用if条件,而不是if(l<h){ int p = partition(arr, l, h); sort(arr, l, p-1); sort(arr, p+1, h); } 循环,如下所示。

while

无需在无限l循环中递归调用sort。循环是无限的,因为算法中永远不会更改r>>> example = [(u'20', (u'bbb', 4500)), (u'10', (u'aaa', 3500)), (u'30', (u'ccc', 7500))] >>> [tuple(x[:1]) + (x[1]) for x in example]

希望这有帮助:)

答案 1 :(得分:1)

您在排序方法中使用了while。这导致无限递归调用,最终将导致StackOverFlowException。正如评论中所建议的那样,这些是常见错误,您可以通过调试(或简单算法的简单干运行)轻松找到它们。

每次调用满足条件sort的方法(l < h )时,您只需要两次递归调用 为此,您需要if条件,而不是while循环,如下所示。

void sort(int[] arr,int l,int h){
    if(l<h){
        int p = partition(arr, l, h);
        sort(arr, l, p-1);
        sort(arr, p+1, h);
    }
 }

答案 2 :(得分:0)

l中的{p> hsort()永远不会改变,因此您始终拥有l < h == true