计数排序

来源:互联网 发布:java离线地图开发 编辑:程序博客网 时间:2024/05/29 15:33
package com.study.arithmetic;/** * 计数排序:假设n个输入数据都介于0到k之间的整数 */
public class CountingSort {
    
    public void countingSort(int[] oriArray, int[] goalArray, int k) {
        
        int[] assArray = new int[k];
        for(int i = 0; i < oriArray.length; i++) {
            assArray[oriArray[i]]++;  // assArray[i] 表示包含等于i元素的个数
        }
        for(int i = 1; i < k; i++) {
            assArray[i] += assArray[i-1];  // assArray[i] 表示包含小于或等于i元素的个数
        }
        for(int i = oriArray.length - 1; i >= 0; i--) {
            goalArray[assArray[oriArray[i]]-1] = oriArray[i]; 
            assArray[oriArray[i]]--;
        }
    }
    
    public static void main(String[] args) {
        CountingSort sort = new CountingSort();
        int[] oriArray = new int[]{4,1,3,2,16,9,10,14,7,7};
        int[] goalArray = new int[oriArray.length];
        sort.countingSort(oriArray, goalArray, 17);
        for(int i = 0; i<goalArray.length; i++)
            System.out.println(goalArray[i]);
        
    }
}求出[a, b] 这个范围内的数字个数,只需用:assArray[b] - array[a-1] .
                                             
0 0