计数排序

计数排序详解
本文介绍了时间复杂度为N的计数排序算法,并提供了一个具体的实现示例。文章讨论了该算法的特点及其适用场景,指出虽然计数排序在某些情况下能有效降低时间复杂度,但在N较小的情况下可能不如快速排序实用。

前段时间研究了一下排序算法,学到了个时间复杂度为N的排序,也就是计数排序了,鸡排就是基于技术排序的。

void CountSort(int *a,int *b,int k,int iLength)
{
 int *pc = new int [k] ;
 for (int i =0 ;i<k ;i++)
 {
  *(pc+i) = 0 ;
  }
 for (int j = 0 ;j<iLength ;j++)
 {
  *(pc+*(a+j)) = *(pc+*(a+j))+1 ;
 }
 for (int i = 1 ;i<k;i++)
 {
  *(pc+i)   = *(pc+i)+*(pc+i-1) ;
 }
 for (int j=0;j<iLength;j++)
 {
  *(b+*(pc+*(a+j))-1) = *(a+j) ;
  *(pc+*(a+j)) = *(pc+*(a+j)) -1 ;
 }
 delete []pc ;
}

稳定的排序算法会降低不少时间复杂度,可惜在N比较小的时候,后面的常量不一定划算,对于现代计算机,还是快排比较方便,而且优化容易。

看TAOUP,里面很强调一点KISS(keep it simple ,stupid),我想这个应该是程序设计的最高境界了,不要过于追求复杂的算法。当然,如果是炫耀的话,可以搞一下~~~

转载于:https://www.cnblogs.com/fireman1985/archive/2009/04/18/1438706.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值