标签:
前面的算法有一个公关特点,就是基于比较大小来排序的。最坏情况NlogN,除了比较外,在做个些别的事情。
假设我们有N个学生,他们的成绩是0到100之间的整数(于是有M=101个不同的成绩值)。如何在线性时间内将学生按成绩排序?
建立101个桶
void Bucket_Sort(ElementType A[], int N) { count[]初始化; while (读入1个学生成绩grade) 将该生插入count[grade]链表; for ( i=0; i<M; i++ ) { if ( count[i] ) 输出整个count[i]链表; } }
时间复杂度是
如果M》》N该怎么办呢? 下面
基数排序是桶排序的升级版
如果是桶排序的话,要建立1001个桶,但是只有十个数,就不划算了。
二进制基数就是2 ,十进制基数就是10,次位优先。
设元素个数为N,整数进制为B,LSD(次位优先)的趟数为P,则最坏时间复杂度是 一共进行了P躺排序。
如果桶的个数非常少,那么时间复杂度就是先行复杂度了。
基数排序的用途,处理多关键字的排序
主位优先没有次位优先好。次位优先根本不需要排序。次位优先在这里也比主位优先要快,
但是LSD任何时候都比MSD快吗?
标签:
原文地址:http://www.cnblogs.com/zrui513/p/4774897.html