Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi排序单链列表_Delphi_Pascal_Bubble Sort - Fatal编程技术网

Delphi排序单链列表

Delphi排序单链列表,delphi,pascal,bubble-sort,Delphi,Pascal,Bubble Sort,我需要气泡排序单链表。 下面是我尝试这样做的代码。 所以它进入无限循环,不工作。 我试图对单链表进行冒泡排序 procedure Sort; var temp :char; curr :node; didSwap :boolean; begin didSwap := true; while (didSwap = true) do begin didSwap := false; curr := head; wh

我需要气泡排序单链表。 下面是我尝试这样做的代码。 所以它进入无限循环,不工作。 我试图对单链表进行冒泡排序

  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;
程序排序;
变量
温度:半焦;
curr:节点;
didSwap:布尔型;
开始
didSwap:=真;
当(didSwap=true)开始时
didSwap:=假;
curr:=水头;
而(当前^下一个零)确实开始
如果(curr^.value>curr^.next^.value),则开始
温度:=当前值;
curr^.value:=curr^.next^.value;
curr^.next^.value:=temp;
didSwap:=真;
curr:=curr^.next;
结束;
结束;
结束;
结束;
程序排序;
变量
温度:半焦;
curr:节点;
didSwap:布尔型;
开始
didSwap:=真;
当(didSwap=true)开始时
didSwap:=假;
curr:=水头;
而(当前^下一个零)确实开始
如果(curr^.value>curr^.next^.value),则开始
温度:=当前值;
curr^.value:=curr^.next^.value;
curr^.next^.value:=temp;
didSwap:=真;
结束;
curr:=curr^.next;
结束;
结束;
结束;
遗憾的是,我找错了增量的位置。
curr:=curr^.next

这是学习使用调试器的绝佳机会。在过程顶部设置断点并运行。当遇到断点时,一次一行地遍历代码,看看逻辑在哪里失败。这将是非常低效的。这大概是一个家庭作业?仅供参考:对于链表,执行选择sortKenWhite更简单,但以空列表结束。delphi中的调试器做得很好。耸耸肩DavidHeffernan,是的,我迫不及待地想得到一个更好的语言,比如Python或C++作为家庭作业。德尔菲就是我。MBo好的,让我来看看它的实现,毕竟它是关于排序单链表,而不是双链表。@KenWhite它失败了:虽然(curr^.next nil)确实开始如果(curr^.value>curr^.next^.value)然后开始temp:=curr^.value;curr^.value:=curr^.next^.value;curr^.next^.value:=temp;didSwap:=真;curr:=curr^.next;结束;结束;气泡排序将在每次传递后对最后一项进行排序。每个循环迭代应该访问较少的一个列表条目。
  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;