一、基本概念
排序算法的时间复杂度是线性的,我们把这类排序算法叫做线性排序,例如桶排序、计数排序、基数排序这三种排序算法的时间复杂度是线性的,都是O(n)。之所以能做到线性的时间复杂度,主要原因是这三个算法是非基于比较的排序算法,不涉及元素直接的比较操作;
二、桶排序:
核心思想是将要排列的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排序完之后,再把每个桶里的数据安装顺序依次取出,组成的序列就是有序的了。如下图所示:
时间复杂度分析:如果要排序的数据有n个,我们把他们均匀的划分到m个桶内,每个桶里的元素就是k=n/m,对每个桶里的元素使用快速排序时间复杂度是O(klogk),m个桶的时间复杂度就是O(m*klogk),k=n/m,所以时间复杂度是O(nlog(n/m)),当桶的个数m接近n时,log(n/m)就是一个很小的常量,这个时候桶排序的时间复杂度接近O(n)。
使用场景:
桶排序对排序数据的要求是非常苛刻的。首先,要排序的数据需要很同意划分成m个桶,并且桶与桶之间有着天然的大小顺序。这样每个桶内的数据排序完之后,桶与桶之间的数据不需要再排序。其次