永发信息网

从大到小排序pascal

答案:2  悬赏:70  手机版
解决时间 2021-05-13 18:03
  • 提问者网友:箛茗
  • 2021-05-13 14:55

Description

输入n个正整数,按从大到小的顺序输出。

Input

第一行只有一个正整数:n (1<=n<=400 000)
第二行共有n个正整数,数与数之间用一个空格隔开,每个数据在闭区间[100,700]内

Output

有若干行,每行有10个数据,每个数据占用4个字符位置(最后一行可以少于10个数据)

Sample Input

5 534 657 435 556 587

Sample Output

657 587 556 534 435

Hint

难在数据规模大,数据量有40万之多

Source

稍难题

谢谢了

最佳答案
  • 五星知识达人网友:山有枢
  • 2021-05-13 16:10
var
i,n,j,k:longint;
a:array[100..700] of longint;
begin
fillchar(a,sizeof(a),0);
readln(n);
for i:=1 to n do begin
read(k);
inc(a[k]);
end;
k:=0;
for i:=700 downto 100 do
for j:=1 to a[i] do begin
inc(k);
write(i:4);
if k mod 10=0 then writeln;
end;
end.
全部回答
  • 1楼网友:枭雄戏美人
  • 2021-05-13 17:38

var n,k:longint; a:array[100..700] of longint; begin readln(n); for i:=1 to n do begin read(k); inc(a[k]); end;

count sort 的重点在于数据范围而不是数据个数,对于这样的数据,完全可以达到O(n)的复杂度

for k:=700 downto 100 do while a[k]>0 do begin write(k,' '); dec(a[k]); end; end.

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯