如何在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
相关产品推荐
相关产品推荐

