美文网首页
排序算法之——分配类排序

排序算法之——分配类排序

作者: 和女神经常玩 | 来源:发表于2018-04-19 21:41 被阅读0次

多关键字排序

多关键字有序:假设有n个记录的序列{r1,r2,...,rn},每个记录ri中含有d个关键字(Ki0,Ki1,...Ki(d-1)),则上述记录序列对关键字(Ki0,Ki1,...Ki(d-1))有序是指:对于序列中任意两个记录ri和rj(1<=i<=j<=n)都满足一下关系:

(Ki0,Ki1,...Ki(d-1))<(Kj0,Kj1,...Kj(d-1))

其中K0称为“最主”位关键字,K(d-1)称为“最次”位关键字。

实现多关键字排序的两种方法:

1).最高位优先MSD法:先对K0进行排序,按K0的不同值将记录序列分成若干个子序列之后,再对K1进行排序,按K1的不同值将子序列再分成若干个子序列,以此类推,直至最后对最次位关键字排序完成为止,然后将所有子序列收集在一起。

2).最低位优先LSD法:先对K(d-1)排序,即分组后再收集,然后对K(d-2)排序,分组后再收集,以此类推,直至对最主位关键字排序完成为止。

注:计算机通常采用LSD,因为它速度快,便于统一处理;而MSD是一个递归的过程,计算机处理时相对复杂。


链式基数排序

思想:对于数字型或者字符型的单关键字,可以看成是由多个数位或多个字符构成的多关键字,此时可采用LSD法,称为基数排序法,由于顺序存储使用基数排序法进行排序时所需的时间和空间都很大,因此采用链式存储,即链式基数排序法。

具体过程:

1).分配:按当前关键字位的取值,将记录分配到不同的链表中,每个链表中记录的关键字位值相同。

2).收集:按当前关键字位的值从小到大将各链表首尾相连成一个链表。

3).重复以上两步直至所有关键字位处理完成。

代码:略。

平均时间复杂度:O(nlog2n)。

稳定性:稳定。

相关文章

  • 排序算法之——分配类排序

    多关键字排序 多关键字有序:假设有n个记录的序列{r1,r2,...,rn},每个记录ri中含有d个关键字(Ki0...

  • 经典算法---排序(摘抄)

    一、排序算法 前言:常见排序算法分类 非线性时间比较类排序:交换类排序(快速排序和冒泡排序)、插入类排序(简单插入...

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 排序 | 基数排序 Radix Sort

    【算法】基数排序 前面介绍的各类排序方法(快速排序,归并排序,插入排序等)都是建立在关键字比较的基础上,而分配类排...

  • 【非比较类排序算法】计数排序、桶排序(PHP实现)

    常见的经典非比较类排序算法有计数排序、桶排序。区别于比较类排序,非比较类排序利用额外的内存空间实现更快排序,算法以...

  • 七大排序算法之冒泡排序

    七大排序算法之冒泡排序 @(算法笔记)[排序算法, 冒泡排序, C++实现] 冒泡排序介绍 冒泡排序是七大排序算法...

  • swift经典算法-基数排序

    基数排序算法 基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子...

  • 2018-04-03 排序算法

    8种排序算法:按照时间复杂度分为两类 简单排序算法:冒泡排序,选择排序,直接插入排序 改进算法:希尔排序,堆排序,...

  • 排序算法总结

    基础排序算法 基础排序算法相关接口和实现类 接口: 实现类(后续排序的父类): 1.选择排序 两层循环:内层循环进...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

网友评论

      本文标题:排序算法之——分配类排序

      本文链接:https://www.haomeiwen.com/subject/sougkftx.html