计数排序

来源:互联网 发布:淘宝设置2件包邮 编辑:程序博客网 时间:2024/06/06 01:43
package interview.silence;public class CountSort {/** * 计数排序算法 * 时间复杂度为O(n+k)的排序算法,n为待排序的个数,k为给定的数的具体范围 * 如果k远大于n,则会造成空间上的极大浪费,以及时间复杂度的没多少降低 * 如果接近,则很节省时间 * @return  */public static int[] sort(int[] a,int max){  //max表示最大的数,这个用来表示一个范围int[] counter = new int[max+1];for(int i=0;i<a.length;i++){   //计数counter[a[i]]++;}for(int i=1;i<=max;i++){  //统计不大于I的数字的个数counter[i]+=counter[i-1];}int[] result = new int[a.length];for(int i=0;i<a.length;i++){result[--counter[a[i]]]=a[i];}return result;}public static void print(int[] a){for(int i=0;i<a.length;i++){System.out.print(a[i]+",");}System.out.println();}public static void main(String[] args){int[] a={3,3,1,6,7,8,4,2};print(sort(a, 8));}}

输出结果是:

1,2,3,3,4,6,7,8,


原创粉丝点击