C井算法设计排序篇之计数排序(附带动画演示程序)
计数排序(Counting Sort)
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的时间复杂度为线性的O(n+k)(其中k是整数的范围,即max - min + 1),快于任何比较排序算法,这是一种典型的空间换时间的算法。
示例:
- public class Program {
- public static void Main(string[] args) {
- int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };
- CountingSort(array);
- ShowSord(array);
- Console.ReadKey();
- }
- private static void ShowSord(int[] array) {
- foreach (var num in array) {
- Console.Write($"{num} ");
- }
- Console.WriteLine();
- }
- public static void CountingSort(int[] array) {
- if (array.Length == 0) return;
- int min = array[0];
- int max = min;
- foreach (int number in array) {
- if (number > max) {
- max = number;
- }
- else if (number < min) {
- min = number;
- }
- }
- int[] counting = new int[max - min + 1];
- for (int i = 0; i < array.Length; i++) {
- counting[array[i] - min] += 1;
- }
- int index = -1;
- for (int i = 0; i < counting.Length; i++) {
- for (int j = 0; j < counting[i]; j++) {
- index++;
- array[index] = i + min;
- }
- }
- }
- }
以上是计数排序算法的一种实现,以下是这个案例的输出结果:
8 11 21 28 32 43 48 56 69 72 80 94
分析:
计数排序算法的时间复杂度为:
,即其时间复杂度是线性的,所以结果同
。
AlgorithmMan:
AlgorithmMan by Iori,AlgorithmMan是使用C#开发的一套用于算法演示的工具。
下载链接:AlgorithmMan-CountingSort
相关推荐
算法改变人生 2020-07-28
路漫 2020-06-16
Skyline 2020-06-16
dushine00 2020-04-19
roseying 2019-12-02
yuanran0 2019-12-01
代码之神 2019-11-04
natloc 2015-05-01
StrongHYQ 2015-04-30
郭岚 2019-06-28
azhedashuaibi 2019-06-28
郭岚 2019-06-27
WindChaser 2019-06-26
YUAN 2019-06-21
郭岚 2017-12-04
清雨轩 2017-11-29
xxylql 2014-04-05
Python探路者 2014-04-25