前段时间研究了一下排序算法,学到了个时间复杂度为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),我想这个应该是程序设计的最高境界了,不要过于追求复杂的算法。当然,如果是炫耀的话,可以搞一下~~~

posted on 2009-04-18 14:38  露一小脸  阅读(229)  评论(0编辑  收藏  举报