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