level 4
第一部分 产生500个随机数
Program p4_1(input,output);
const n=500;
var
i,a,s:integer;
f:text;
begin
assign(f,'data.out');
rewrite(f);
randomize;
s:=0;
for i:=1 to n do
begin
a:=random(1001);
write(f,a:5);
if i mod 10 =0 then writeln(f);
if a>=500 then s:=s+1;
end;
close(f);
write('>=500 :', s);
end.
第二部分 选择排序
Program p4_2(input,output);
const n=500;
var
i,j,p,t:integer;
f1,f2:text;
a:array[1..n] of integer;
begin
assign(f1,'data.out');
reset(f1);
for i:=1 to n do read(f1,a[i]);
close(f1);
for i:=1 to n-1 do
begin
p:=i;
for j:=i+1 to n do
if a[j]<a[p] then p:=j;
t:=a[i];a[i]:=a[p];a[p]:=t;
end;
assign(f2,'datasort.out');
rewrite(f2);
for i:=1 to n do
begin
write(f2,a[i]:5);
if i mod 10 =0 then writeln(f2);
end;
close(f2);
end.
第三部分 冒泡排序
Program p4_3(input,output);
const n=500;
var
i,j,t:integer;
f1,f2:text;
a:array[1..n] of integer;
begin
assign(f1,'data.out');
reset(f1);
for i:=1 to n do read(f1,a[i]);
close(f1);
for i:=1 to n-1 do
for j:=n downto i+1 do
begin
if a[j]<a[j-1] then
t:=a[j-1];
a[j-1]:=a[j];
a[j]:=t;
end;
assign(f2,'datasort.out');
rewrite(f2);
for i:=1 to n do
begin
write(f2,a[i]:5);
if i mod 10=0 then writeln(f2);
end;
close(f2);
end.
选择排序正确 冒泡排序出现错误 求指教。
2012年07月29日 12点07分
1
level 4
冒泡输出结果
219 920 447 934 934 956 956 997 997 998
998 999 999 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
1000 1000 1000 1000 1000 1000 1000 1000 1000 1000
2012年07月29日 15点07分
2
你这几百个1000是要吓死爹啊
2012年07月29日 17点07分
回复 @**家的右手 :请问冒泡排序为什么会出问题
2012年07月30日 10点07分
回复@**家的右手 :这ID和谐
2012年08月02日 11点08分
level 4
谁叫你把N设成了500呢?
pascal就是能傻乎乎地输出500个数了!?
不信。。。数一数有几个数吧!
2012年07月31日 06点07分
8
n设成别的也有这样的问题
2012年07月31日 14点07分
@认真又开心灬才子a 请你自己读入N,要输入几个就把N设成几。 代码么。。。 没问题吧。。。 至少我看不出。。。 另外,请回复一个输入数据。。。
2012年08月01日 04点08分
level 10
或者把begin移到 then 后面....这粗心的...
2012年08月01日 13点08分
10
begin end应该没有错
2012年08月02日 02点08分
@认真又开心灬才子a for j:=n downto i+1 do[$1]begin[$1][$1]a[j-1]:=a[j];[$1]a[j]:=t;[$1]end; 这里不应该是当a[j]<a[j-1]时交换a[j]和a[j-1]吗?如果写成这样,那就不是交换了
2012年08月02日 04点08分
level 10
for i:=1 to n-1 do
for j:=n downto i+1 do
begin 【我说的是这个begin end】
if a[j]<a[j-1] then
t:=a[j-1]; 【这样当不满足if时就也会执行下面两句赋值语句了】
a[j-1]:=a[j];
a[j]:=t;
end;
2012年08月02日 04点08分
11
懂你的意思了,是我基础不扎实。谢谢。
2012年08月02日 13点08分
level 12
for i:=1 to n-1 do
for j:=n downto i+1 do
begin
if a[j]<a[j-1] then
begin
t:=a[j-1];
a[j-1]:=a[j];
a[j]:=t;
end;
end;
2012年08月02日 10点08分
12
level 14
其实冒泡排序没什么用。
真正有用的还是选择排序、快速排序和桶排序(hash)!
-堆排序就常数小些,但一般不会去写。
-归并排序也就求逆序对,还不如树状数组速度快。
-插入排序可以见鬼了。
其他奇葩的排序比如珠排序,bogo排序,睡眠排序实在没什么好说,缺乏实用性吧。
2015年07月13日 03点07分
15
level 1
var a:array[1..10000] of longint;
n,i,j,t: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
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.
2015年07月13日 06点07分
17
level 2
Program p4_3(input,output);
const n=500;
var
i,j,t:integer;
f1,f2:text;
a:array[1..n] of integer;
begin
assign(f1,'data.out');
reset(f1);
for i:=1 to n do read(f1,a[i]);
close(f1);
for i:=1 to n-1 do
for j:= i+1 to n do
if a[i]>a[j] then begin a[i]:=a[i]+a[j]; a[j]:=a[i]-a[j]; a[i]:=a[i]-a[j];
assign(f2,'datasort.out');
rewrite(f2);
for i:=1 to n do
begin
write(f2,a[i]:5);
if i mod 10=0 then writeln(f2);
end;
close(f2);
end.
应该可以了。
2016年05月20日 07点05分
18