系列文章:数据结构与算法系列——从菜鸟到入门
简述
计数排序基于桶排序。
比如待排数组 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; } } }
实现方式与算法导论中不一样,算法导论中的方法还没领悟= =,以后更新。