Java基础(4)非比较排序

非比较排序十一中牺牲空间来获得时间的排序

1、桶排序

时间复杂度:O(N)

此排序适用于范围0~k的整数数组,且元素的值没有重复(要求还挺苛刻)

原理:将待排序数组的元素A[i]放入新数组B[A[i]]中,这样讲元素值作为下标来存放,就已经完成了排序,因为数组的下标搬来就是由小到大有序的。

Java基础(4)非比较排序_第1张图片

2、计数排序

时间复杂度:O(N)

原理:对于给定的输入序列中的每一个元素x,确定该序列中值小于x的元素的个数。一旦有了这个信息,就可以将x直接存放到最终的输出序列的正确位置上。

过程:

①建一个长度为K+1的的数组C,里面的每一个元素初始都置为0(Java里面默认就是0)。

②遍历待排序的数组,计算其中的每一个元素出现的次数,比如一个key为i的元素出现了3次,那么C[i]=3。

③累加C数组,获得元素的排位,从0开始遍历C, C[i+1]=C[i]+C[i-1]

④建一个临时数组T,长度与待排序数组一样。从数组末尾遍历待排序数组,把元素都安排到T里面,直接从C里面就可以得到元素的具体位置, 不过记得每处理过一个元素之后都要把C里面对应位置的计数减1。


Java基础(4)非比较排序_第2张图片

你可能感兴趣的:(Java基础(4)非比较排序)