pascal语言插入排序问题
解决时间 2021-04-30 17:41
- 提问者网友:感性作祟
- 2021-04-29 18:32
书上有一个插入排序的例子,我理解不了,我把发上来,帮忙我理解一下插入排序。
program e10_4;
var i,j:integer;
a:array[0..6] of integer;
begin
for i:=1 to 6 do
read(a[i]);
for i:=2 to 6 do
begin
j:=i;
a[0]:=a[i];
while a[j-1]>a[0] do
begin
a[j]:=a[j-1];
j:=j-1;
end;
a[j]:=a[0];
end;
for i:=1 to 6 do
write(a[i],' ');
end.
最佳答案
- 五星知识达人网友:蕴藏春秋
- 2021-04-29 19:24
var
i, j, k, l: Integer; // 循环变量
a: array[0..9] of Integer; // 数组
tmp: Integer; // 临时变量
begin
for i := 0 to 9 do
a[i]:= 0; // 清空数组
for i := 0 to 9 do // 循环读入数值
begin
Readln(tmp); // 读数值
l:= i;
for j := 0 to i - 1 do // 开始循环比较
if tmp > a[j] then // 找到比读入大的数
begin
l:= j; // 记录下标
Break; // 退出比较
end;
for k := i - 1 downto l do
a[k + 1]:= a[k]; // 所有元素后移一位
a[l]:= tmp; // 当前数值插入数组
end;
writeln;
for i := 0 to 9 do
Writeln(a[i]);
readln;
end.
全部回答
- 1楼网友:爱难随人意
- 2021-04-29 22:11
就是for i::=1 to n do将第i个元素插入到前i-1个元素中。PS:LS的是选择排序,别误导别人了。
- 2楼网友:老鼠爱大米
- 2021-04-29 20:56
就是枚举每个数,向前寻找要插入的位置插入。
例如 7 3 2 5 4 6
第一次 3 7 2 5 4 6
第二次 2 3 7 5 4 6
第三次 2 3 5 7 4 6
第四次 2 3 4 5 7 6
第五次 2 3 4 5 6 7
不过我比较喜欢用冒泡,代码比较短又好理解。
for i:=1 to n do
for j:=i+1 to n do
if a[i]>a[j] then
begin t:=a[i];a[i]:=a[j];a[j]:=t;end;
- 3楼网友:七十二街
- 2021-04-29 20:19
拓扑排序(从小到大)Program sort;Var a: Array[1..10] Of Integer; n, i: Integer;Procedure Quick_sort(l, r: Integer);Var i, j, t, x: Integer;Begin i := l; j := r; x := a[(i + j) Div 2]; Repeat While a[i] < x Do Inc(i); While a[j] > x Do Dec(j); If i <= j Then Begin t := a[i]; a[i] := a[j]; a[j] := t; Inc(i); Dec(j); End; Until i > j; If l < j Then Quick_sort(l, j); If i < r Then Quick_sort(i, r);End;Begin ReadLn(n); For i:=1 To n Do Read(a[i]); Quick_sort(1, n); For i:=1 To n Do Write(a[i], ' ');End.选择排序(从小到大)Program sort;Var a: Array[1..10] Of Integer; n, i, j, t: Integer;Begin ReadLn(n); For i:=1 To n Do Read(a[i]); For i:=1 To n-1 Do For j:=i+1 To n Do If a[i] > a[j] Then Begin t := a[i]; a[i] := a[j]; a[j] := t; End; For i:=1 To n Do Write(a[i], ' ');End.有问题发邮件649187156@qq.com
我要举报
大家都在看
推荐资讯