You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pascal插入排序程序中输出逐步骤的排序执行过程?

插入排序逐步骤输出实现

你只需要在排序逻辑的关键节点增加打印语句,就能输出每一步的排序变化,修改后的完整代码如下:

program insertsort;
const 
  max = 100;

type 
  arr = array [1..max] of integer;

var
  data : arr;
  n, i, j : integer;

  (* 新增:通用数组打印过程 *)
  procedure PrintArr(size: integer);
  var
    k: integer;
  begin
    for k := 1 to size do
      write(data[k], ' ');
    writeln;
  end;

  procedure InsertionSort(size : integer);
  var 
    i, j, index : integer;
  begin
    writeln;
    writeln('===== 排序过程开始 =====');
    for i := 2 to size do
    begin
      index := data[i];
      j := i;
      writeln('第', i-1, '轮排序,待插入元素:', index);

      while ((j > 1) and (data[j-1] < index)) do
      begin
         writeln('移动元素 ', data[j-1], ' 到位置 ', j);
         data[j] := data[j-1];
         j := j - 1;
      end;

      data[j] := index;
      write('本轮排序后数组:');
      PrintArr(size);
      writeln('------------------------');
    end;
    writeln('===== 排序过程结束 =====');
  end;
   
begin
  write('输入数据个数:'); 
  readln(n);

  for i := 1 to n do
  begin
    write ('第',i,'个数据 = '); readln(data[i]);
  end;
  
  writeln;
  write ('排序前数组:');
  PrintArr(n);

  InsertionSort(n); // 修复原代码参数错误:原传max改为实际数量n

  writeln;
  write('最终排序结果:');
  PrintArr(n);

  readln;
end.

本次调整的内容:

  • 新增了通用的数组打印过程PrintArr,避免重复编写打印逻辑
  • 修复了原代码的参数错误:原代码调用排序方法时传入固定值max,会处理未赋值的无效数组元素,现已改为传入实际输入的元素个数n
  • 在每一轮排序开始时标注当前待插入的元素,移动元素的过程也会单独打印
  • 每完成一个元素的插入操作后打印当前的完整数组状态,清晰展示每一步的变化

如果你不需要展示元素移动的细节,只需要删掉内层while循环里的打印语句即可,就只会保留每轮排序后的数组状态输出。

内容的提问来源于stack exchange,提问作者us12glasses

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:45:00