数据结构——计数排序

系列文章:数据结构与算法系列——从菜鸟到入门

简述

计数排序基于桶排序。

比如待排数组 A[5]={101, 100, 103, 102, 105}; 那么就需要建造 105(max)-100(min)+1=6 大小的临时数组,将这 5 个元素按照,值减 100(min) 作为下标存储在临时数组中。如下图所示:

源码实现

/**
 * 计数排序
 * @param A
 * @param n
 */
private static void jiShu(int[] A, int n) {
    // 找出数组中的最大与最小值
    int min = A[0];
    int max = A[0];
    for (int i = 0;i < n;i++) {
        if (A[i] < min) {
            min = A[i];
        }
        if (A[i] > max) {
            max = A[i];
        }
    }
    // 将数据装入桶中,每个桶的值代表该下标值在数组中出现的次数
    int[] bucket = new int[max - min + 1]; // 建桶
    for (int i = 0;i < n;i++) {
        bucket[A[i]-min]++;
    }
    // 将桶倒出至原数组中
    int index = 0;
    for (int i = 0;i < bucket.length;i++) {
        for (int j = 0;j < bucket[i];j++) {
            A[index++] = i+min;
        }
    }
}

实现方式与算法导论中不一样,算法导论中的方法还没领悟= =,以后更新。

原文地址:https://www.cnblogs.com/zhengbin/p/6561030.html