free pascal编程:给出n个数,你要将这n个数从小到大排序输出,源程序如下,只需解释。

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]先选好,.这都是什么意思啊?求解释

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.追问

你这个明显错了啊!

追答

哦,那对的呢?

追问

额😓

我的原程序就是对的罗

追答

{先假设下标为i的元素为最大}这个注释的大括号为全角的,应改为半角: {先假设下标为i的元素为最大}

追问

那您可以再写一遍吗?

追答

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;
for j:=i+1 to n do if a[j]>a[max] then max:=j;
if maxi then begin
t:=a[i]; a[i]:=a[max]; a[max]:=t;
end;
end;
for i:=1 to n do writeln(a[i]);
end.

温馨提示:内容为网友见解,仅供参考
无其他回答

给出n个数,你要将这n个数从小到大排序输出
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的。如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一...

关于FREE PASCAL的排序方法
一、插入排序:(简单排序)时间复杂度:O(n^2)(1)直接插入---稳定排序(2)拆半插入---稳定排序(3)2-路插入排序---稳定排序(4)表插入排序---稳定排序(5)希尔排序---不稳定排序二、快速(交换)排序:(平均时间复杂度:O(nlogn)、最坏情况:O(n^2))---不稳定排序(1)冒泡排序---稳定排序(2)快速排序三...

关于Free Pascal 编程问题
for j:=1 to (n+1)-i do write('*');writeln;end;{注意:j表示的是每行要画星星的次数,所以用 to 或 downto 没有关系} 同理后面的也是这么分析 3)应该是:可见,这次在前面的基础上要加上一个输出空格的语句,不难发现空格数与2)的星星数是相同的,所以直接把上面的程序中write('*...

快速排序算法(free pascal)详解,不要源程序,时间复杂度n(logn);谢了\/...
1)、设置两个变量I、J,排序开始的时候I:=1,J:=N;2)以第一个数组元素作为关键数据,赋值给X,即X:=A[1];3)、从J开始向前搜索,即由后开始向前搜索(J:=J-1),找到第一个小于X的值,两者交换;4)、从I开始向后搜索,即由前开始向后搜索(I:=I+1),找到第一个大于X的值...

如何做这题 free pascal 用repeat语句 解得别太复杂 我才7年及 要让...
小于四位数的十位=这个数除10的结果再除10的余数 (如204=204 ÷ 10=20 20 ÷10=2...0)(个位+百位)整除十位=(个位+百位)除十位的余数为0,所以就=(个位+百位) mod 10=0 Var i:Longint;Begin Repeat Inc(i); {i+1} If ((i Mod 10)+(i Div 100)) Mod (i Div 10 Mod...

free pascal习题
输入的第一行为一个单独的整数n(n<=20)表示单词数,以下n行每行有一个单词,输入的最后一行为一个单个字符,表来“龙”开头的字母。你可以假定以此字母开头的“龙" 一定存在。输出:只需输出以此字母开头的最长的“龙”的长度 样例:输入 5 at touch cheat choose tact a 输出 23 (连成的“...

编程free Pascal设计一个过程,排序元素
procedure xsort(var a:arr; n:integer);{选择排序} var i,j,k,m:longint;begin for i:=1 to n-1 do begin k:=i; {打擂台,k表示本轮最小元素的下标} for j:=i+1 to n do if a[j]<a[k] then k:=j; {如发现更小的,就更新k} if k<>i then begin m:=a[k]...

用free pascal来编个程序求数串的原始排列,最好每部有分析
const STEP = 2;type PRec = ^TRec;TRec = record data: Integer;prev: PRec;next: PRec;end;var n, i: Integer;head, tail, cur, p: PRec;begin Readln(n);if n <= 0 then Exit;head := nil;tail := nil;for i := 1 to n do begin New(p);p^.data := i;p^.prev :...

free pascal 递归讲解
5.求n个自然数的最大公约数与最小公倍数 6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子?7.已知:数列1,1,2,4,7,13,24,44,...求数列的第 n项.2.3典型例题 例3 梵塔问题 如图:已知有三根针分别用1,2,3表示,在一号针中从小放n个盘子,现要求把所有的盘子...

Freepascal编程问题
program tri;var i,j,n:longint;begin readln(n);\/\/你要9就输9 for i:=1 to n do begin for j:=1 to i do write(' ');for j:=1 to i do write('*');writeln;end;end.羡慕你们,我们的程序...后天就是省选

相似回答