我被我的快速排序程序卡住了。我需要计算排序函数调用自己的总次数。
procedure quick (first, last, counter: integer);
var i, k, x : integer;
begin
i := first;
k := last;
x := a[(i+k) div 2];
counter := counter + 1;
while i<=k do begin
while a[i] < x do
i:= i+1;
while a[k] > x do
k:= k-1;
if i<=k then begin
prohod(i,k);
i:=i+1;
k:=k-1;
end;
end;
if first<k then quick(first,k, counter);
if i<last then quick(i,last, counter);
P:= P + counter;
end;
我尝试了这个,其中p是全局变量,计数器是递归变量,首先称为1 (quick(1, n, 1))。可惜没起作用。我还设P:= 0;就在我调用排序(快速)过程之前(我不太确定这是否是处理问题的正确方法,但这是我能想到的)。
任何想法如何使这正确和/或为什么我的计数器不工作?
这看起来太复杂了。如果您只是删除计数器,将P初始化为值-1(而不是0),并将P:= P +计数器替换为P:= P + 1,则应该可以工作。