free pascal编程:给出n个数,你要将这n个数从小到大排序输出,源程序如下,只需解释。
vara:array[1..10]oflongint;i,j,t,n:longint;beginreadln(n);fori:=1tondoread(a[i]);fori...
var
a:array[1..10] of longint;
i,j,t,n:longint;
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
begin
if a[i]>a[j] then
begin
t:=a[j]; a[j]:=a[i]; a[i]:=t;
end;
end;
for i:=1 to n do
writeln(a[i]);
end. 下面有段话,请解释一下:其实该程序还可以进一步优化,再为第i位选择一个最大的数时,可以在[i,n]范围内先选好最大的数,最后进行一次交换,这样减少了很多交换次数。这是什么意思啊?,什么在为第i为选择一个最大得数啊?还再[i,n]先选好,.这都是什么意思啊?求解释 展开
a:array[1..10] of longint;
i,j,t,n:longint;
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
begin
if a[i]>a[j] then
begin
t:=a[j]; a[j]:=a[i]; a[i]:=t;
end;
end;
for i:=1 to n do
writeln(a[i]);
end. 下面有段话,请解释一下:其实该程序还可以进一步优化,再为第i位选择一个最大的数时,可以在[i,n]范围内先选好最大的数,最后进行一次交换,这样减少了很多交换次数。这是什么意思啊?,什么在为第i为选择一个最大得数啊?还再[i,n]先选好,.这都是什么意思啊?求解释 展开
1个回答
展开全部
var
a:array[1..10] of longint;
i,j,t,n:longint;
max:longint; {增加一个临时变量,用其保存最大的序号}
begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n-1 do begin
max:=i; {先假设下标为i的元素为最大}
for j:=i+1 to n do if a[j]>a[max] then max:=j; {如果找到比假设大的,记下它的下标}
if max<>i then {只有当循环后的max不等于i时才交换}
begin
t:=a[i]; a[i]:=a[max]; a[max]:=t;
end;
end;
for i:=1 to n do
writeln(a[i]);
end.
a:array[1..10] of longint;
i,j,t,n:longint;
max:longint; {增加一个临时变量,用其保存最大的序号}
begin
readln(n);
for i:=1 to n do
read(a[i]);
for i:=1 to n-1 do begin
max:=i; {先假设下标为i的元素为最大}
for j:=i+1 to n do if a[j]>a[max] then max:=j; {如果找到比假设大的,记下它的下标}
if max<>i then {只有当循环后的max不等于i时才交换}
begin
t:=a[i]; a[i]:=a[max]; a[max]:=t;
end;
end;
for i:=1 to n do
writeln(a[i]);
end.
更多追问追答
追问
你这个明显错了啊!
追答
哦,那对的呢?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询