设有n个记录{R1, R2, …,Rn},每个记录Ri的关键字是由若干项(数据项)组成,即记录Ri的关键字Key是若干项的集合: {Ki1, Ki2, …,Kid}(d>1) 。记录{R1, R2, …,Rn}有序的,指的是"i, j∈[1,n],i<j ,若记录的关键字满足:
{Ki1, Ki2, …Kid}<{Kj1, Kj2, …Kjd},即Kip ≤Kjp (p=1, 2, … d)
多关键字排序思想
先按第一个关键字K1进行排序,将记录序列分成若干个子序列,每个子序列有相同的K1值;然后分别对每个子序列按第二个关键字K2进行排序,每个子序列又被分成若干个更小的子序列;如此重复,直到按最后一个关键字Kd进行排序。
最后,将所有的子序列依次联接成一个有序的记录序列,该方法称为最高位优先(Most Significant Digit first)。
另一种方法正好相反,排序的顺序是从最低位开始,称为最低位优先(Least Significant Digit first)。
链式基数排序
若记录的关键字由若干确定的部分(又称为 “位”)组成,每一位(部分)都有确定数目的取值。对这样的记录序列排序的有效方法是基数排序。
设有n个待排序记录{R1, R2, …,Rn}, (单)关键字是由d位(部分)组成,每位有r种取值,则关键字R[i].key可以看成一个d元组: R[i].key={Ki1, Ki2, …,Kid} 。
基数排序可以采用前面介绍的MSD或LSD方法。以下以LSD方法讨