计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,对每一个输入元素x,确定出小于x的元素的个数,就可以把x直接放到最终输出数组的位置上。例如有17个元素小于x,那么x位于第18个输出位置。而当有几个元素相同时,方案需要修改,不能把他们放在同一个输出位置上。也就是说,计数排序比较适合元素之间没有重复的情况。
就时间效率来看,计数排序几乎是只需要扫描一遍数组就可以将数放在正确的位置上,这比快速排序,堆排序等时间复杂度为nlog(n)快得多(时间复杂度为n),但时间上的缩短将会导致空间上的支出。对于计数排序,可以打个比方,假设输入的数据的最大值为1000,那么新开辟的数组必然要有1000个空间,因为排序的过程可以看成一种过程:假设输入250,那么就将这个数组的第250号位置记为1,而其他的初始化为0(当然,这样的话就不能允许重复的元素出现,所以实际的代码会略有变化,这里可以先这么理解)。所以,即使输入只有3个数,而最大的数是1000的话,那么至少也要开辟1000个数组空间,这样就造成了极大的资源浪