链表二进制插入排序,错误216,有时可行

时间:2014-06-12 13:48:32

标签: algorithm sorting pascal

我正在尝试在链表中实现二进制插入排序。该程序编译良好,每三次运行一次。它抛出错误216 - 一般保护错误(可能解除引用nil指针)。在使用Pascal中的链接列表时,我不是第一次遇到此问题,但我仍然不知道是什么原因造成的,以及为什么它有时会起作用,有时也不会。谢谢你的任何建议。

代码示例为here

编辑:罪魁祸首必须在这个while循环中的某个地方:

while (y^.next <> original.tail) do begin
    y:=original.takeOutFirst;
    l := 1; r := i-1;
    while (l<=r) do begin
            m := (l+r) div 2;
            x := sorted.itemNumber(m);
            if x^.data > y^.data then r:= m-1
            else l:=m+1
    end;
    x := sorted.ItemNumber(l);
    sorted.insertInsteadOf(x, y);
    inc(i);

端;

1 个答案:

答案 0 :(得分:0)

在样本中,在第13行,我将i:= 2更改为i:= 1并且代码奇迹般地起作用。为什么呢?!

相关问题