美文网首页
dart 桶排序

dart 桶排序

作者: 锦鲤跃龙 | 来源:发表于2020-11-18 15:54 被阅读0次

桶排序

1.思路

  1. 创建一定数量的桶(比如用数组、链表作为桶)
  2. 按照一定的规则(不同类型的数据,规则不同),将序列中的元素均匀分配到对应的桶
  3. 分别对每个桶进行单独排序
  4. 将所有非空桶的元素合并成有序序列

1.1例子

原数组为[0.34,0.47,0.29,0.84,0.45,0.38,0.35,0.76]

这里是小数,所以元素在通用的索引可以:元素值*元素数量

  • 创建8个桶如下,每个桶都是数组
桶号 内容
0
1
2 [0.34,0.29,0.35]
3 [0.47,0.45,0.38]
4
5
6 [0.84,0.76]
7
  • 对每个桶单独进行排序
    则变成
桶号 内容
0
1
2 [0.29,0.34,0.35]
3 [0.38,0.45,0.47]
4
5
6 [0.76,0.84]
7
  • 将所有非空桶的元素合并成有序序列
    则变成
    [0.29,0.34,0.35,0.38,0.45,0.47,0.76,0.84]

1.2代码

class BucketSourt extends Sort<num>  {
  @override
  sort() {
    //创建桶
    List<List> buckets = List(list.length);
    for (var i = 0; i < list.length; i++) {
      int bucketIndex = (list[i]*list.length).floor();
      List<num> bucket = buckets[bucketIndex];
      if (bucket == null) {
        bucket = List();
        buckets[bucketIndex] = bucket;
      }
      bucket.add(list[i]);
    }
    //对每个桶进行排序
    int index = 0;
    for (var i = 0; i < buckets.length; i++) {
      if (buckets[i]==null) continue;
      buckets[i].sort();
      for (var item in buckets[i]) {
        list[index++] = item;
      }
    }
  }
  
}

实验


main(List<String> args) {
 BucketSourt bucketSourt =  BucketSourt();
 bucketSourt.list = [0.34,0.47,0.29,0.84,0.45,0.38,0.35,0.76];
 bucketSourt.sort();//这里复杂度 nlogn
 print(bucketSourt.list );
}

结果

[0.29, 0.34, 0.35, 0.38, 0.45, 0.47, 0.76, 0.84]

1.3 复杂度

空间复杂度:O(n + m),m 是桶的数量
时间复杂度:
O(n)+m*O(n/m*logn/m)
= O(n+n*logn/m)
= O(n+n*logn-n*longm)
约等于 O(n+k),k为 n*logn-n*longm

题外

跟哈希表的思想有点像

相关文章

  • dart 桶排序

    桶排序 1.思路 创建一定数量的桶(比如用数组、链表作为桶) 按照一定的规则(不同类型的数据,规则不同),将序列中...

  • 算法基础 排序(一)

    桶排序冒泡排序快速排序 1.桶排序 所谓的桶排序就是列出所有的可能进行排序 小结:这里的桶排序只是简化版的.桶排序...

  • 《数据结构与算法之美》10——排序(三)桶排序、计数排序、基数排

    桶排序 概念 桶排序,核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排序之后,再把...

  • 桶排序

    什么是桶排序桶排序是计数排序的衍化桶排序需要创建若干个桶来装元素协助排序。每一个桶(bucket)代表一个区间范围...

  • 桶排序,计数排序和基数排序

    桶排序 桶排序的核心思路 桶排序的核心处理思想是先定义几个有序的桶,将要排序的数组按照桶划分的值的范围分到这几个桶...

  • 桶排序与哈希桶排序

    一.桶排序 算法原理 桶排序 (箱排序)的原理是将待排序序列分到有限数量的桶里面,然后对每个桶再分别排序(可以使用...

  • php-计数排序、基数排序、桶排序

    计数排序、基数排序、桶排序 时间复杂度 O(n) 计数排序 基数排序 桶排序

  • 数组-桶排序

    采用桶排序方式对数组进行排序 桶排序百科:桶排序(Bucket Sort),或者所谓的箱排序是一种非比较排序.工作...

  • 13|桶排序

    桶排序( Bucket sort )首先,我们来看桶排序。桶排序,顾名思义,会用到 “ 桶 ” ,核心思想是将要排...

  • 线性排序

    桶排序 核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排序完之后,再把每个桶里的数...

网友评论

      本文标题:dart 桶排序

      本文链接:https://www.haomeiwen.com/subject/odhqiktx.html