回 帖 发 新 帖 刷新版面

主题:桶排

上次老师讲了桶排的应用,但是我喜欢用快速排序,但是老师说桶排的效率是快排的20倍,我怎么也想不通,谁能告诉我为什么呢?

回复列表 (共6个回复)

沙发

举个例子:
数据: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),若数据比较大量的话桶排时间效率就很高了...
缺点:如果数据范围比较大,那桶排的空间效率就超低了......

板凳

能把例题发一下吗?

3 楼

什么是桶排?

4 楼

桶排适用于待排序的数据符合一定的要求,可以枚举(如1~1000的整数,而不是1~1000的实型数据),而且数据量较多(相比数据范围)。

例如,如果是1~100的10000个数字排序,显然桶排更具优势。
而如果是1~10000的100个数字排序,桶排不必冒泡好。

简单的思想就是记录每个数据出现的次数,然后依次数输出。
其复杂度始终是O(m),而快排平均是O(n[b]log[/b]n)。
(其中m表示数据范围的大小,n表示数据的个数)

5 楼

桶排。。。好雷人!

6 楼

要是几年前,内存超低的时候,我看谁敢用桶排!

我来回复

您尚未登录,请登录后再回复。点此登录或注册