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;