有没有做过这样的算法啊:类似数据表的Order by 字段1,字段2...?高分相送。这是我一个快考试的同学火烧眉才告诉我,他急。特来求救,详细
下面是题目:
“任取一表,编制程序用基数排序的方法排列其中记录”
实现环境:visual basic ,visual c++,visual foxpro,Java均可
基数排序原理:
“在一般情况下,假设文件F有N个记录F=(R1,R2。。。RN)且每个记录R1中含有 d 个排序码(K i1,Ki2,.....Kid)有序是指:对于文件中任意两个记录Ri,Rj(1<=i<=j<=n)都满足词典次序有序关系:(Ki1,Ki2,....Kid)<Kj1,Kj2,....Kjd)其中K1称为最高位排序码,Kd称为最低位排序码。为实现多排序码排序,通常有两种方法。
第一种是:先对最高位排序码K1进行排序将序列分成若干个子序列,每个子序列中的记录都具有相同的K1值,然后分别就每个子序列K2进行排序,按K2值不同再分成若干更小的子序列,依次重复,直至对Kd-1进行之后得到的每一子序列中的记录都具有相同的关键码(K1,K2。。。Kd-1)而后分别每个子序列对Kd 进行排序,最后将各子序列按次序叠在一起成为一个有序文件。这种方法称之为最高位优先法;
第二种方法是从最低位排序码Kd起进行排序,然后再对高一位的关键码Kd-1进行排序,依次重复,直至对K1进行排序之后便得到一个有序排列,这种是LSD法
有的逻辑排序码可以看成由若干排序码复合而成。如,排序码是数值,且其值都在0<=k<=999范围内,则可把每一个十进数字看成一个排序码,则K有3个关键码(K1K2K3)组成,其中K1是百位数,K2是十位数,K3是个位数。若排序码是5个字母组成的单词,则可看成是5个排序码(K1K2K3K4K5)组成其中Kj是(自左至右)的第J个字母。由于如此分解而得的每个排序码Kj都在相同的范围内,则选用LSD方便,从最低位排序码排起,按排序码的不同值将文件中的记录分配到RD个子序列中后收集之。如此重复D次
要求:将每个字段定为排序码,即关键码进行排序。
例如有一学生情况表,字段有“姓名,学号,性别”等。按LSD进行排序,若按“姓名,学号,性别"的顺序来排,表中记录会是怎样,若按“学号,姓名,性别”的顺序来排,表中的记录会是怎样;若按“性别,学号,姓名”的顺序来排,表中的记录会是怎样........
注意:不要利用索引