码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构--排序(下)--基数排序

时间:2015-09-01 10:20:42      阅读:343      评论:0      收藏:0      [点我收藏+]

标签:

基数排序

前面的算法有一个公关特点,就是基于比较大小来排序的。最坏情况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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!