首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pascal - Enhanced Merge Sort for inversion count错误输出

Pascal - Enhanced Merge Sort for inversion count错误输出
EN

Stack Overflow用户
提问于 2017-12-21 02:19:08
回答 1查看 144关注 0票数 0

我有一个学校的作业,要创建一个项目,可以计算整数数组中的倒数。我一开始试着强行实现,但正如我所料,我没有超过时间限制。因此,在谷歌搜索并试图完全理解mergeSort以及如何在其中实现倒数计数后,我编写了这段代码,不幸的是,它输出了错误的计数,同时正确地对数组进行了排序:

代码语言:javascript
复制
procedure mergeSort(var arr, pomarr : array of longint; start, stop : 
longint; var inv : longint);
var
  mid,i,j,k : longint;
begin
  mid := (start + stop) div 2;
  if (start < mid) then mergeSort(arr,pomarr,start,mid,inv);
  if (mid+1 < stop) then mergeSort(arr,pomarr,mid+1,stop,inv);

  i := start;
  k := start;

  while (i<= mid) and (j <= stop) do begin
    if (arr[i] < arr[j]) then begin
      pomarr[k] := arr[i];
      i += 1;
    end
    else begin
      pomarr[k] := arr[j];
      inv += mid - i;
      j += 1;
    end;
    k += 1;
  end;
  while (i <= mid) do begin
    pomarr[k] := arr[i];
    i += 1;
    k += 1;
  end;
  while (j <= stop) do begin
    pomarr[k] := arr[j];
    j += 1;
    k += 1;
  end;

  for k := start to stop do begin
    arr[k] := pomarr[k];
  end;
end;  

提前感谢你的帮助。我知道这只是声明中的一些愚蠢的错误,但我似乎就是找不到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-21 09:32:10

所以我在某种程度上设法解决了我的问题。我问我的老师什么可能会导致这个问题,他告诉我,在程序的头部声明变量类型和在程序主体中声明变量类型是有区别的。之后,我通过创建数组类型修复了我的程序:

代码语言:javascript
复制
type
  numlist = array[1..250000] of longint;

并通过这个类型在函数和其他地方声明了我使用的数组。而且它真的起作用了。

从我收集到的信息来看,如果你声明了一个没有使用类型的数组,迭代实际上是从0开始,而不是像往常那样从1开始。老实说,我不知道这两个事实是如何关联的,但它解决了我的问题,现在它像预期的那样运行。

如果有人知道是什么导致了这种迭代转换,请让我知道。实际上,我比以前更困惑了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47912129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档