当我尝试运行下面的快速排序代码时,它会进入无限循环。最后一次迭代将进入无限循环。
button.translatesAutoresizingMaskIntoConstraints = false
button.imageView?.translatesAutoresizingMaskIntoConstraints = false
请在出错的地方提供帮助。
答案 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> h
和sort()
永远不会改变,因此您始终拥有l < h == true