Pascal快速排序-计算递归的总数



我被我的快速排序程序卡住了。我需要计算排序函数调用自己的总次数。

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,则应该可以工作。

最新更新