数据结构-桶排序 计数排序 基数排序
文章目录 桶排序(Bucket sort) 简介 时间复杂度 使用场景 计数排序(Counting sort) 简介 例子 代码实现 总结 基数排序(Radix sort) 简介 使用场景 代码实现 总结 注:所有的代码在我的 Github 中有均具体C++代码实现。 这里主要讲的是三大 线性排序 :桶排序(Bucket sort)、计数排序(Counting sort)和基数排序(Radix sort)。 所谓线性排序,也就是说时间复杂度为 O(n),而之所以能够做到线性排序,是因为这三个算法是 非基于比较 的排序算法,都不涉及元素之间的比较操作。 桶排序(Bucket sort) 简介 顾名思义,会用到“桶”,核心的思想就是将要排序的数据分到几个有序的桶里面,然后每个桶再进行单独的排序。桶内的数据排序过后,再把每个桶里面的数据依次取出,这样组成的序列就是有序的了。 时间复杂度 如果要排序的数据有 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) 就是一个非常小的常量,这个时候桶排序的时间复杂度接近