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

回到顶部