主题:一道令我困惑不已的题
tanchenggang
[专家分:0] 发布于 2005-03-19 19:35:00
有怎么一道题:
任意输入20个数字,然后从大到小输出。
我知道这道题可能很菜,但是我还是希望有高手赐教,晚辈不胜感激~
联系方式:QQ:439883777
回复列表 (共7个回复)
沙发
47 [专家分:590] 发布于 2005-03-19 20:00:00
program paixu;
var
a:array[1..20]of integer;
i,j,temp:integer;
begin
for i:=1 to 20 do readln(a[i]);
for i:=1 to 19 do
for j:=i+1 to 20 do
if a[j]>a[i] then
begin
temp:=a[i];
a[i]:=a[j];
a[j]:=temp;
end;
for i:=1 to 20 do writeln(a[i]);
end.
只是一个简单的选择排序
其实排序在做题时只是一个小过程而已
板凳
mdjqdh [专家分:140] 发布于 2005-04-03 11:56:00
先排序 后输出
不用考虑原数据是否被打乱 要容易 很多
3 楼
xuzhenyi [专家分:850] 发布于 2005-04-04 21:50:00
记住冒泡
for i:=1 to 19 do
begin
for j:=i to 20 do
begin
if a[i]<a[j] then
换位
end;
end;
其他的你肯定会
4 楼
xuzhenyi [专家分:850] 发布于 2005-04-04 21:52:00
插入的话
var
a:array[1..20] of longint;
i,k,c:integer;
b:array[1..25] of longint;
begin
i:=1;
while i<>21 do
begin
readln(a[i]);
for k:=1 to i-1 do
if a[i]>a[k] then
begin
for c:=1 to i-k do
b[c]:=a[k+c-1];
a[k]:=a[i];
for c:=1 to i-k do
a[k+c]:=b[c];
end;
i:=i+1;
end;
for i:=1 to 20 do
write(a[i],' ');
writeln;
readln;
end.
5 楼
hs3180 [专家分:530] 发布于 2005-04-05 08:17:00
各位达人是不是要把所有的排序都发到这个帖里啊?
6 楼
faintzw [专家分:2660] 发布于 2005-04-05 22:48:00
笑一个
那会不会累死?
就20个数而已……时间复杂度不超过一个很小的常数……
没必要用O(nlogn)乃至O(n)的吧……
快排,归排,计排,基排,堆排,桶排……我知道的稍微复杂点的排序就6种……
7 楼
faintzw [专家分:2660] 发布于 2005-04-05 22:53:00
还有三楼的,j<-i+1 to n才好吧……
另外,这显然是选择排序,不要和冒泡混了
我来回复