计数排序
用辅助数组对数中出现的数字计数,元素转下标,下标转元素
假设元素均大于等于0,依次扫描原数组,将元素值k记录在辅助数组的
k位上
思想:空间复杂度:辅助空间k,k=max(source)
时间复杂度:扫描一次source,扫描一次helper,复杂度为N+k
非原址排序
稳定性:相同元素不会出现交叉,非原址都是拷贝来拷贝去
计数有缺陷,数据较为密集或者范围较小的时候适用。
伪代码思路实现
public static CountSort(source):
max = maxOf(source) //求出最大值
int [] helper = new int [max + 1]//定义一个数组
for (int e : source) //初始化数组
helper[e]++;
int k = 0;
for (int i=1;i<helper.length;i++)
while(helper[i]>0)
source[k++] = i;
helper[i]--;