【问题标题】:Pascal bubble sort print each sorted line帕斯卡冒泡排序打印每个排序的行
【发布时间】:2022-01-26 23:58:09
【问题描述】:

我的冒泡排序算法可以正常工作,但我想对其进行设置,以便在最终输出过程中打印每一行(19 行)。我几乎尝试了所有方法,但打印不正确:

program Bubble_Sort;

const N = 20;

var
  d : array[1..N] of integer;
var
  i,j,x : integer;
begin

  randomize;
  for i := 1 to N do d[i] := random(100);
  writeln('Before sorting:'); writeln;
  for i := 1 to N do write(d[i], ' ');
  writeln;

  for j := 1 to N - 1 do
    for i := 1 to N - 1 do
      write(d[i], ' ');
      if d[i] > d[i+1] then 
      begin
        x := d[i]; d[i] := d[i+1]; d[i+1] := x;
      end;


  writeln('After sorting:'); writeln;
  for i := 1 to N do write(d[i], ' ');
  writeln;
end.

【问题讨论】:

  • 请显示当前输出是什么以及所需输出的示例。

标签: sorting pascal bubble-sort


【解决方案1】:

代码中心的外部循环,for j ... 循环在每次冒泡迭代时运行。那是您要输出排序状态的地方。因为您因此在该 for j ... 循环中有多个语句,所以您还必须添加一个 begin .. end 对:

for j := 1 to N - 1 do
begin
  //one round of sorting
  //display result so far
end;

排序没问题,除非你添加了write(d[i], ' '); 大概是为了输出一次迭代的排序结果,你改变了执行顺序变得完全错误。 从现在的位置删除write(d[i], ' ');

要在每次迭代后显示排序结果,请添加一个新的for k ... 循环和一个writeln;

for k := 1 to N do
  write(d[k], ' ');
writeln;

最终排序和进度显示应该是这样的结构:

for j := 1 to N - 1 do
begin
  for i := 1 to N - 1 do
  // one round of sorting
  for k := 1 to N - 1 do
  // output result of one sorting round
end;

【讨论】:

  • 谢谢!这真的很有帮助。
  • @anna:当某个答案对您有所帮助时,就像汤姆的答案一样,请养成“接受”它的习惯,方法是点击其左上角旁边的“打勾”图标。
猜你喜欢
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-09
  • 2014-06-25
  • 2021-12-15
相关资源
最近更新 更多