【问题标题】:Linked list binary insertion sort, error 216, sometimes works链表二进制插入排序,错误 216,有时有效
【发布时间】:2014-06-12 13:48:32
【问题描述】:

我正在尝试在链表中实现二进制插入排序。该程序编译良好,大约每三次运行一次。它抛出错误 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);

结束;

【问题讨论】:

  • 您能否发布在您的问题中演示该问题所需的最少代码?您可以使用 SO 编辑器中的“代码”按钮对其进行很好的格式化。
  • 你能保证y永远不为零吗?
  • @PaulNathan 是的,我想是的。 y 列表的所有元素都不应该为 nil。只是 tail^.next 是 nil,但永远不应该达到。
  • @PaulNathan 这没有任何意义:/

标签: algorithm sorting pascal


【解决方案1】:

在示例中,在第 13 行,我将 i:=2 更改为 i:=1 并且代码奇迹般地工作。为什么?!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多