QuickSort程序达到最大递归限制500?
我正在通过在MATLAB中绘制图形来分析排序算法。以下是我的快速排序代码。当我运行它时,会出现此错误:
已
500
达到最大递归限制。使用set(0,'RecursionLimit', N)
改变了极限。请注意,超出可用堆栈空间可能会使MATLAB和/或计算机崩溃。==> quickSort中的错误
为什么会发生此错误?我的代码有什么问题吗?
function [ar] = quickSort(ar, low, high) if low < high
[ar, q] = parti(ar, low, high);
ar = quickSort(ar, low, q - 1);
ar = quickSort(ar, q + 1, high);
end
end
function [ar, i] = parti(ar, p, r)
x = ar(r);
i = p - 1;
for j = p : r
if ar(j) <= x
i = i + 1;
if i ~= j
tmp = ar(i);
ar(i) = ar(j);
ar(j) = tmp;
end
end
end
i = i + 1;
tmp = ar(i);
ar(i) = ar(r);
ar(r) = tmp;
end
我正在使用
ar = [7,7,3,0,3,1,4,7,5,6]quickSort(ar, 1, 10)
回答:
在函数中parti
,要基于枢轴对数组进行分区,在尝试确定其正确位置时要 包括枢轴本身 。
在某些情况下,这导致无限递归,因为 。
回答:
解决方案1:
function [ar,i]= parti(ar,p,r) x=ar(r);
i=p-1;
for j=p:r-1 % Notice the r-1
if ar(j) <= x
i=i+1;
if i~=j
% ...
解决方案2:
function [ar,i]= parti(ar,p,r) x=ar(r);
i=p-1;
for j=p:r
if ar(j) < x % Notice the change in checking
i=i+1;
if i~=j
% ...
以上是 QuickSort程序达到最大递归限制500? 的全部内容, 来源链接: utcz.com/qa/401097.html