【问题标题】:Delphi Sorting Single-Linked ListDelphi排序单链表
【发布时间】:2021-03-09 17:04:01
【问题描述】:

我需要冒泡排序单链表。 这是我尝试这样做的代码。 所以它进入无限循环并且不起作用。 我正在尝试对单链表进行冒泡排序。

  procedure Sort;
 var  
     temp :char;
     curr :node;
   didSwap :boolean;
 begin
   didSwap := true;
   while (didSwap = true) do begin
       didSwap := false;
     curr := head;
       while (curr^.next <> nil) do begin
           if (curr^.value > curr^.next^.value) then begin
               temp := curr^.value;
               curr^.value := curr^.next^.value;
               curr^.next^.value := temp;
               didSwap := true;
               curr := curr^.next;
           end; 
       end;
   end;
 end;

【问题讨论】:

  • 这是您学习使用调试器的绝佳机会。在程序顶部设置断点并运行。当断点被命中时,一次单步执行一行代码以查看逻辑失败的地方。
  • 这将是非常低效的。大概这是家庭作业?
  • 仅供参考:对于链表,实现选择排序更简单
  • KenWhite 它以空列表结尾。 delphi中的好调试器。 耸耸肩 DavidHeffernan,是的,我迫不及待地想学习一种更好的语言,比如 Python 或 C++ 作为家庭作业。德尔福只是嗯。 MBo好吧,让我看看它的实现,毕竟它是关于排序单链表,而不是双链表。
  • @KenWhite 失败:while (curr^.next nil) do begin if (curr^.value > curr^.next^.value) then begin temp := curr^.value;当前^.value := 当前^.next^.value; curr^.next^.value := temp; didSwap := 真;当前 := 当前^.下一个;结尾;结束;

标签: delphi pascal bubble-sort


【解决方案1】:
  procedure Sort;
  var  
      temp :char;
      curr :node;
    didSwap :boolean;
  begin
    didSwap := true;
    while (didSwap = true) do begin
        didSwap := false;
      curr := head;
        while (curr^.next <> nil) do begin
            if (curr^.value > curr^.next^.value) then begin
                temp := curr^.value;
                curr^.value := curr^.next^.value;
                curr^.next^.value := temp;
                didSwap := true;
            end; 
                curr := curr^.next;
        end;
    end;
  end;

遗憾的是,我找到了错误的增量位置。 当前 := curr^.next;

【讨论】:

  • 冒泡排序在每次通过后对最后一项进行排序。每次循环迭代应该少访问一个列表条目。
猜你喜欢
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多