主题:桶排
wangminrui0804
[专家分:30] 发布于 2009-12-17 20:04:00
上次老师讲了桶排的应用,但是我喜欢用快速排序,但是老师说桶排的效率是快排的20倍,我怎么也想不通,谁能告诉我为什么呢?
回复列表 (共6个回复)
沙发
abcwuhang [专家分:1840] 发布于 2009-12-19 10:22:00
举个例子:
数据:7
7 6 1 4 3 8 2
桶排:program tp;
var n,i,j:longint;
a:array [0..1000000] of longint;
begin
readln(n);
fillchar(j,sizeof(j),0);
for i:=1 to n do
begin
read(j);
a[j]:=a[j]+1;
end;
for i:=1 to 8 do
for j:=1 to a[i] do
write(i,' ');
end.
快排大概要nlogn的复杂度,而桶排只有o(max-min),若数据比较大量的话桶排时间效率就很高了...
缺点:如果数据范围比较大,那桶排的空间效率就超低了......
板凳
se7en革命 [专家分:0] 发布于 2010-02-24 15:07:00
能把例题发一下吗?
3 楼
yjj150985 [专家分:0] 发布于 2010-02-24 15:12:00
什么是桶排?
4 楼
小田甜 [专家分:3910] 发布于 2010-02-27 18:43:00
桶排适用于待排序的数据符合一定的要求,可以枚举(如1~1000的整数,而不是1~1000的实型数据),而且数据量较多(相比数据范围)。
例如,如果是1~100的10000个数字排序,显然桶排更具优势。
而如果是1~10000的100个数字排序,桶排不必冒泡好。
简单的思想就是记录每个数据出现的次数,然后依次数输出。
其复杂度始终是O(m),而快排平均是O(n[b]log[/b]n)。
(其中m表示数据范围的大小,n表示数据的个数)
5 楼
chip [专家分:80] 发布于 2010-08-06 12:58:00
桶排。。。好雷人!
6 楼
chip [专家分:80] 发布于 2010-08-06 13:00:00
要是几年前,内存超低的时候,我看谁敢用桶排!
我来回复