线性排序:

115 阅读2分钟

线性排序:桶排序,计数排序,基数排序。因为时间复杂度是线性的

桶排序: 核心就是将数据划分为几个有序的桶里,每个桶在进行单独排序,桶内排完序后,在把每个桶的数据有序拿出来,这样组合后也是有序的

桶排序的时间复杂度:

如果有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)

计数排序 计数排序其实是桶排序的一种特殊情况,当排序的那个数据,所处的范围并不大的时候,比如最大值是K,我们就可以把数据划分成K个桶,每个桶内的数据都是相同的,省掉了桶内排序的时间

计数排序只能用早数据范围不大的场景中,如果数据范围k比要排序的数据n大很多,就不适合用计数排序了,而且,计数排序只能给非负证书排序,如果要排序的数据是其他类型的,将其在不改变相对大小的情况下,转化为非负整数。

基数排序

基数排序对要排序的数据是有要求的,需要可以分割出独立的“位”来比较,而且位之间有递进的关系,如果a数据的高位比b数据大,那么剩下的低位就不用比较了,除此之外,每一位的数据范围不能太大,要可以用线性排序算法来排序,否则基数排序的时间复杂度就无法做到O(n)了