|
10.6.1 多关键字的排序
一般情况下,对多关键字排序的定义为:
假设含有 n 个记录的序列为:
每个记录 Ri 中含有 d 个关键字,则称该记录序列对关键字有序是指:对于序列中任意两个记录
Ri 和 Rj(1≤i<j≤n)都满足下列有序关系:
其中 K0 被称作最主位关键字,Kd-1 被称作最次位关键字。
通常实现多关键字排序可以有两种策略:一是最主位优先(MSD法),另一是最次位优先(LSD法)。
最主位优先的作法是:先对最主位关键字K0进行排序,得到若干子序列,其中每个子序列中的记录都含相同的K0值,之后分别就每个子序列对关键字K1进行排序,致使K1值相同的记录构成长度更短的子序列,依次重复,直至就当前得到的各个子序列对
Kd-2 进行排序之后得到的每个子序列中都具有相同的关键字,分别对这些子序列按
Kd-1 从小到大进行排序,最后由这些子序列依次相连所得序列便是排序的最后结果,即对关键字
有序。
|
|
|
假如你手中有一副扑克牌,若要将它们排列成一个有序序列,你准备怎么做?
|
|
你可能是先按不同"花色"将它们分成有次序的四堆,然后分别对每一堆按"面值"
大小(2<3<…<A)排列有序。若将"花色"视作K0,将 "面值"
视作K1,这种整理方法即为"MSD"的作法。
那么你现在换一种方法试试,先将手中的牌按 "面值"分成13堆,然后将这13堆牌从大到小收集在一起("A"在"K"之上,"K"在"Q"之上,……,最下面的是4张"2"),再重新按不同"花色"分成4堆,最后将这4堆牌按自小至大的次序收集在一起(在最上面,在最下面),此时你手中的牌已是从上到下有序的了。显然,这种整理方法即为"LSD"的作法。
可见按最次位优先进行排序时,对每一位关键字的排序不一定要用前几节所述的内部排序方法进行,而是用先按类"分配"再依次"收集"的方法进行。
|
|