计数排序

Posted 血影雪梦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计数排序相关的知识,希望对你有一定的参考价值。

本总结是是个人为防止遗忘而作,不得转载和商用。

基本思想

         计数排序的核心思想,是用空间换取时间,本质是建立了基于元素的Hash表。

例子

         数组原始数据如下:             

         给定一个辅助数组,因为A的最大的数是5这里给定一个长度为6的数组C。

         1,初始化C:

        

         2,统计数组A中值为i的元素个数,将其放在C的对应位置

        

                   如:A中有2个0,所以C[0] = 2,A中有0个1,所以C[1] = 0。

         3,统计数组A中值小于等于i的元素个数

        

                   即:

                            C[0]= 2

                            C[1]= C[1] + C[0] = 2

                            C[2]= C[2] + C[1] = 4

                            ...

         4,从后向前执行最后一个循环

                  i = 7时,A[7] = 3, C[3] = 7,于是就令B[7-1] =3

                  i = 6时,A[7] = 0, C[0] = 2,于是就令B[2-1] =0

                   ...

                   这样最后出来的数组B就是对A的排序了。

时间复杂度和其他

         计数排序是稳定的。

         话说,这里需要实现申请好空间,如:如果是字母那就要申请个256或65535的空间。这个和数组的长度N是无关的,所以其空间复杂度是O(1)。

 

以上是关于计数排序的主要内容,如果未能解决你的问题,请参考以下文章

计数排序(Counting Sort)

排序算法非比较排序:计数排序基数排序桶排序

计数排序(Counting Sort)

计数排序——Counting Sort

如何获取列中值的不同计数

如何使用linq获取表中值的计数