package com.zhiru;
/*
* 计数排序稳定的排序算法
* 时间复杂度:O(n+k)[输入元素是0-k之间的整数的时候]
*
*/
public class CountingSort {
public static int[] sort(int[] a, int[] b, int k) {
int len=a.length;
//数组c用来记录待排序数组a中值等于i的元素的个数.
int[]c=new int[k+1];
for(int i=0;i<len;i++){
c[a[i]]++;//统计序列中各个元素出现的次数.
}
for(int i=1;i<=k;i++){
c[i]=c[i]+c[i-1];//统计小于等于i的元素个数。
}
for(int j=0;j<len;j++){
int val=a[j];//取出j位置上的值
int pos=c[val];//根据值的大小获取c中的位置信息
b[pos-1]=val;//将值放入pos-1位置处
c[val]--;//位置数减一
}
return b;
}
}
数据结构之计数排序
最新推荐文章于 2023-01-19 08:30:00 发布