首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图理解桶排序代码

试图理解桶排序代码
EN

Stack Overflow用户
提问于 2009-08-16 15:49:25
回答 2查看 3.1K关注 0票数 0

关于以下代码,我有三个问题:

代码语言:javascript
复制
  static void funct(int[] list)  {
  final int N = 20;

  java.util.ArrayList[] buckets = new java.util.ArrayList[N];
  for(int i = 0;  i< list.length; i++)  {
     int key = list[i];
     if(buckets[key] = null)
          buckets[key].add(list[i]);
  }
  int k = 0
  for(int i = 0; i <buckets.length; i++)  {
      if(buckets[i] != null)  {
          for(int j = 0; j< buckets[i].size(); j++)
              list[k++] = (Integer)buckets[i].get(j);
      }
  }

}

算法的一个主要缺点是,它只适用于最多20个元素,而且代码的complexity?

  • The点很差,就是对元素列表进行排序--将它们放入数组中,然后放入桶中,然后再将它们从桶中放入数组中?
  1. Heres是我遇到的问题,您将如何修改该方法,以便您能够传递包含另一个类的对象而不是整数的数组?
EN

Stack Overflow用户

发布于 2009-08-16 16:04:28

回答你的问题:

  1. ,这是两个缺点。暂时不要管它的复杂性,考虑一下它应该如何工作在20多个元素上。对于桶排序,其思想是根据元素在元素的总范围中的位置来选择桶。在具有二进制整数的计算机上,最简单的方法是选择数字中的前几位(最重要位),并使用两个桶数的幂(如16或32 )。您可以使用一个和操作(&)获得最重要的位元(因此可以计算出桶)。然后,您可以使用比特直接选择桶。桶排序的思想是使用基排序元素对输入进行初始传递,然后在小桶上使用不同的排序(或迭代基排序),这可能比较小,排序更容易,或者所有桶的连接(例如返回数组)可以使用较小的complexity.
  2. Bucket排序,这样您就可以将该范围划分为各个区段,然后单独对输入进行分类。最简单的方法是,如果输入是数字的。如果输入中的排序仅是相对的,并且没有已知的绝对项,也没有一种简单的方法来确定任何一个元素在总范围内的位置,那么桶排序是不合适的。
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1284598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档