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

多关键字排序

多关键字有序:假设有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)。

稳定性:稳定。

你可能感兴趣的:(排序算法之——分配类排序)