给出n个数,你要将这n(n<=100000)个数从小到大排序输出 用pascal做

如题所述

冒泡法,已试过,望采纳
program maopao;
const n=5; {n设为5,可以修改}
var a:array[1..n] of integer;
i,j:integer;
temp:integer;
begin
writeln('please input array');
for i:=1 to n do read(a[i]); {读入数组a}
writeln('array a:');
for i:=1 to n do write(a[i],' ');writeln; {输出原始数据}
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
begin
temp:=a[i];a[i]:=a[j];a[j]:=temp; {交换a[i],a[j])
end;
writeln('Result');
for i:=1 to n do write(a[i],' ');writeln; {输出}
end.追问

不行啊

追答

数据溢出吗?把integer改正longint

其他应该是对的,试过很多次了,

附图:


program maopao;

const n=5;                                                         {n设为5,可以修改}

var a:array[1..n] oflongint;         

    i,j:integer;

    temp:longint;

begin

     writeln('please input array');

     for i:=1 to n do read(a[i]);                    {读入数组a}

     writeln('array a:');

     for i:=1 to n do write(a[i],'  ');writeln;  {输出原始数据}

        for i:=1 to n-1 do

         for j:=i+1 to n do

            if a[i]>a[j] then

            begin

              temp:=a[i];a[i]:=a[j];a[j]:=temp;  {交换a[i],a[j])

              end;

     writeln('Result');

     for i:=1 to n do write(a[i],'  ');writeln;   {输出}

end.

追问

题目描述
给出n个数,你要将这n(n<=100000)个数从小到大排序输出
输入

第一行一个整数n 接下来n行,每行一个整数
输出

将这n个整数从小到大排序输出,每个数占一行
样例输入
5
5
4
3
2
1

样例输出

1
2
3
4
5

追答

现在行了吧 

程序如下:

program maopao;

var a:array[1..100000] of longint;

    i,j:integer;

    temp:longint;

    n:1..100000;

begin

     readln(n);

     for i:=1 to n do readln(a[i]);

        for i:=1 to n-1 do

         for j:=i+1 to n do

            if a[i]>a[j] then

            begin

              temp:=a[i];a[i]:=a[j];a[j]:=temp;

              end;

     writeln('Result');

     for i:=1 to n do writeln(a[i],'  ');writeln;

end.

附图:

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-03
插入排序,希尔排序,快速排序!
数据量已经很大了,简单排序效率太低了!
第2个回答  2013-02-02
冒泡排序太慢,必须使用时间复杂度低的快速排序或堆排序,时间复杂度O(NlogN)。
第3个回答  2013-02-02
一种排序方法:冒泡排序
program Project1;
var
na: array[1..100000] of Integer;
n, i, j, k: Longint;
begin
n := 0;
{Read}
while not Eoln do
begin
Inc(n);
Read(na[n]);
end;
{Sort}
for i := 1 to n - 2 do
for j := 1 to n - i do
if na[j] > na[j + 1] then
begin
k := na[j];
na[j] := na[j + 1];
na[j + 1] := k;
end;
{Print}
for i := 1 to n do
Write(na[i], ' ');
Readln;
Readln;
end.追问

不行

追答

n不需要你输入!你输入任意个数,数与数之间用空格隔开,全输完了按回车,答案就出来了。
我的电脑试没有问题。

追问

题目描述
给出n个数,你要将这n(n<=100000)个数从小到大排序输出
输入

第一行一个整数n 接下来n行,每行一个整数
输出

将这n个整数从小到大排序输出,每个数占一行
样例输入 Copy

5
5
4
3
2
1

样例输出 Copy

1
2
3
4
5

追答

如果你连题目都描述不清楚,就不要随便说别人的程序“不行”。
用下面的就行了。
program Project1;
var
na: array[1..100000] of Integer;
n, i, j, k: Longint;
begin
Readln(n);
for i := 1 to n do
Readln(na[i]);
for i := 1 to n - 1 do
for j := 1 to n - i do
if na[j] > na[j + 1] then
begin
k := na[j];
na[j] := na[j + 1];
na[j + 1] := k;
end;
for i := 1 to n do
Write(na[i], ' ');
Readln;
end.

第4个回答  2013-02-02
先比较选出最小的,然后把最小的T掉再从剩下的里面找出最小的,以此类推,最后到没有数了就停止.(最笨的方法...)

ferr pascal求 下面
由于每个糖果的价值≤1000000,更好的选择是桶排序(就是计数排序),开一个a:array[1..1000000]的数组,然后直接模拟。

...知道怎么优化我的程序才能不超时?数据范围的N<=100000.
思路:假设猴子的期望值Ki之和为s,则第i只猴子的桃子数为int(m\/s*Ki+0.5)。这种分法是最优的。

求100000以内的纯粹素数 用pascal
求纯粹素数的代码如下:var i,j,n,t,code:longint; s:string; prime:array[2..1000000]of boolean;begin fillchar(prime,sizeof(prime),true); readln(n); for i:=2 to trunc(sqrt(n)) do if prime[i] then begin for j:=2 to n div i do prime[i*j]:=false;...

编程,图论。给定一个无向图,N个点,N<=50000;M条边,M<=100000.
简单图的最长路径是个NP问题。如果是无环图的话就有多项式算法。

PASCAL 求众数
问下,你的n是数组量还是单元格中值?array 【0..100array [0..100000】中100000 太大了

PASCAL求一个数的个十百千万位上的数
给你一个求一个数左数第k位的函数,如果没有则返回-1。写个简单的递归程序。function get(n,k:longint):longint;begin if ((trunc(ln(n)\/ln(10))+1)<k)or(k<1) then exit(-1);if k=1 then exit(n mod 10);exit(n div 10,k-1);end;你说的“百位=这个数 mod 10;十位=...

O(n) 的排序 pascal
有的一个比较猥琐的排序法,比选择排序和快速排序要快一些,但必须是已知数据范围的情况下才可以行的排序,代码如下:var n,i,j,num:longint;a:array[1..100000] of longint;begin readln(n);{输入数据的总个数} fillchar(a,sizeof(a),0);{清空计数数组} for i:=1 to n do begin rea...

pascal 快速排序
直到I等于J时退出循环,此时X的位置为I,将X放在I位置,也就是说X比表中前面数据大而比表中后面数据小,这此再用相同方法递归排序前面数据和后面数据。参考子程序:procedure quicksort(var a:arr;s,t:integer);var I,j:integer;begin i:=s;j:=t;x:=a[s];{赋初值,确定当前表的上限s和...

Pascal排序
dec(a[i]);\/\/每输出一个,就-1 end;end.var a:array[0..100000] of longint;\/\/快速排序 n,i:longint;procedure sort(i1,j1:longint);var i,j,n,s:longint;begin i:=i1;j:=j1;n:=a[(i+j) div 2];\/\/找中间作比较的数(称为中介)repeat while a[i]<n do inc(i);\/...

关于Pascal中的排序
不用比如说了,一般排序是不会有这么大的数据的。一般用的是快排,但实际上堆排更快一些。Program heapsort;var a:array[1..100000] of longint;n,i:longint;procedure swap(var a,b:longint);var t:longint;begin t:=a;a:=b;b:=t;end;procedure heap(i,n:longint);var j,x:long...

相似回答