PASCAL冒泡 算法问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 13:58:07
program msport;
type
shuzu=array[1..20] of integer;
var {从大到小排序}
a: shuzu;
i,n,j,er:integer;
begin
writeln('paiduoshaoge?'); readln(n);
for i:= 1 to n do
begin
read(a[i]);
end;
for i:=1 to n do
for j:= 1 to n-i do
begin
if (a[j]<a[j+1]) then
a[er]:=a[j];a[j]:=a[j+1];a[j+1]:=a[er] ;
end;
for i:= 1 to n do
begin
write(a[i]:8);
end;
readln;
readln;
end.

问题: 先把程序看明白了 这是个冒泡排序
但我也不知道哪里错了~ 输入10个数, 会发现他是错的…… 而且经常有 有的数字重复出现 有的数字没老…… 麻烦大虾们帮帮忙 如果能解决很好 我好好加分!~

for 循环应该这样写:
for i:=1 to n-1 do
for j:=i+1 to n do
………………(你全写错了,晕!!)
还有你的er应付初值为:n以外的数;
但我建议你最好定义一个x:integer来代替a[er]!

以下我的程序仅供参考:

var
i,j,x,n:integer;
a:array[1..1000] of 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
x:=a[i]; a[i]:=a[j]; a[j]:=x;
end;
for i:=1 to n do
write(a[i],' ');
end.

此程序是将数组从大到小排列,n为有多少个数,你要输如10个数,那麽n=10

你是初学的吧,好好学,要独立思考,像你提的问题一般是没有人喜欢浪费时间来解答的,我闲着没事,长长人品!

var
a:array[1..8]of integer;
i,j,t:integer;
begin
for i:=1 to 8 do read(a[i]);
for i:=1 to 7 do
begin
for j:=1 to 8-i do
begin
if a[j]>a[j+1] then begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end;
end;
end;
for i:=1 to 8 do write(a[i],' '