主题:求pascal快排实例试题与答案
niucai
[专家分:0] 发布于 2009-11-19 10:37:00
[color=FF0000]求pascal快排实例试题与答案
各位有的话就麻烦分享下~~~~~~~
在下感激啊~~~~~~[em4][em4][em4][/color]
回复列表 (共7个回复)
沙发
niucai [专家分:0] 发布于 2009-11-19 10:51:00
下面程序有错吗?
program qsort;
var l,r,i:longint;
a:array[1..100] of longint;
procedure qsort(l,r:longint);
var i,j:longint;
mid:real;
begin
i:=l;j:=r;mid:=a[(l+r)div 2];
repeat
while a[i]<mid do inc(i);
while a[j]>mid do dec(j);
if i<=j then begin
swap(a[i],a[j]);
inc(i);dec(j);end;
until i>j;
if j>l then qsort(l,j);
if i<r then qsort(i,r);
end;
begin
readln(r);
for i:=1 to r do
read(a[i]);
qsort(1,r);
for i:=1 to r do
write(a[i]);
end.
板凳
abcwuhang [专家分:1840] 发布于 2009-11-22 09:41:00
应该没错
输出要:write(a[i],‘ ’)才好看
3 楼
chip [专家分:80] 发布于 2009-11-27 13:08:00
靠!
别简写‘swap’函数就好了啥!!!
////////////////////////////////
program qsort;
var l,r,i,k:longint; ////改之
a:array[1..100] of longint;
procedure qsort(l,r:longint);
var i,j:longint;
mid:real;
begin
i:=l;j:=r;mid:=a[(l+r)div 2];
repeat
while a[i]<mid do inc(i);
while a[j]>mid do dec(j);
if i<=j then begin
k:=a[j]; //改之
a[j]:=a[i]; //改之
a[i]:=k; //改之
inc(i);dec(j);end;
until i>j;
if j>l then qsort(l,j);
if i<r then qsort(i,r);
end;
begin
readln(r);
for i:=1 to r do
read(a[i]);
qsort(1,r);
for i:=1 to r do
write(a[i]);
end.
4 楼
abcwuhang [专家分:1840] 发布于 2009-11-29 14:17:00
回楼上:PASCAL里也有swap函数的!!只不过此SWAP非彼SWAP,而且运行不稳定。。。
摘自MATRIX67的网站。。。
5 楼
小田甜 [专家分:3910] 发布于 2009-11-30 20:44:00
swap:交换一个数据的高位字节和低位字节。(貌似是的)
6 楼
abcwuhang [专家分:1840] 发布于 2009-12-05 08:51:00
楼上正解....
其实是先把原数转成二进制数,然后再把前16位和后十六位交换(不足补0),再转成10进制,输出...
7 楼
chip [专家分:80] 发布于 2010-08-06 23:05:00
其实说来说去,没把握的东西就先别用啊!
多谢楼上开导,今日懂swap了,呵呵!
我来回复