计数排序

来源:互联网 发布:淘宝销售属性出错 编辑:程序博客网 时间:2024/05/18 14:13

待优化,以支持更大范围的数组排序


package com.zk.ds;import Utils.PrintUtils;/** * 计数排序<br> * 计数排序的范围的假设是待排序的数字位于一个小范围内<br> * 参考:算法导论-P98-计数排序一节 * @author 1291700520@qq.com * */public class CountingSort {public static void main(String args[]){int[] nums = {2,5,3,0,2,3,0,3};nums = countSort(nums, 5);PrintUtils.printIntArray(nums);}/** * 计数排序 * @param array 只适用于元素>=0,且最大值<=maxKey的数组 * @param maxKey 最大值 * @return 排好序的数组 */public static int[] countSort(int array[], int maxKey){if(array == null){throw new NullPointerException("array is null...");}int[] countsArray = new int[maxKey + 1];int len = array.length;/*统计个数*/for(int i=0; i<len; ++i){countsArray[array[i]]++;}for(int i=1; i<countsArray.length; ++i){countsArray[i] = countsArray[i] + countsArray[i-1];}/*扫描输出*/int[] helper = new int[len];for(int i=len-1; i>=0; --i){helper[countsArray[array[i]]-1] = array[i];--countsArray[array[i]];}return helper;}}


0 0