Skip to content

Latest commit

 

History

History
18 lines (18 loc) · 1.08 KB

bucket_sort.md

File metadata and controls

18 lines (18 loc) · 1.08 KB

桶排序

原理
  • 根据数据范围,分成若干个数据段,通过遍历数据放到对应的桶中
  • 每个桶都进行快排或归并
时间复杂度
  • 时间复杂度解释
    • 如果排序的数据 有n个,我们把它们均匀地划分到m个桶内,每个桶里就有 k = n / m 个元素
    • 每个桶内使用快速排序,时间复杂度为 O(k * logk)
    • m 个桶排序的时间复杂度就是 O(m * k * logk),因为 k = n / m, 所以整个桶排序的时间复杂度就是 O(n *log(n / m))
    • 当桶的个数m接近数据个数n时,log(n / m)就是一个非常小的常量,这个时候桶排序的时间复杂度接近O(n)
  • 最好O(n), 最坏o(nlogn), 平均O(n), 一般桶分越细越多复杂度就会越好
空间复杂度
  • 空间复杂度:O(n)
稳定性
  • 取决于每个桶的排序方式,快排就不稳定,归并就稳定
适用场景
  • 数据范围不大,内存紧张的情况。如磁盘的读写可以分成多个小文件并对小文件排序
  • 然后直接写到大文件里,这个时候,内存消耗不再是O(n)