如何使用pascal中的插入排序对记录文件进行排序?

如何使用pascal中的插入排序对记录文件进行排序?

问题描述:

所以我有一个.dat文件,它由大约20个记录组成。记录的字段是:名称,日期和分数,我想按照分数对记录进行排序,以便我可以在高分表中显示它们。我不确定如何实现这种排序,所以任何帮助都会很棒。谢谢如何使用pascal中的插入排序对记录文件进行排序?

将文件读入记录数组中,将每条记录插入到正确的位置。然后将数组写回到文件中。

以下是未经测试的代码,写在我头上。关键线被标记为** ** - 第一行为新读取的记录找到正确的位置,第二行从该位置向前碰撞所有记录。

const 
maxrec = 50; 

type 
MyRecord = record 
      name: string[63]; 
      date: tdatetime; 
      score: integer 
      end; 

var 
myfile: file of myrecord; 
rec: myrecord; 
data: array [1..maxrec] of myrecord; 
i, j, count: integer; 

begin 
fillchar (data, sizeof (data), 0); 
assignfile (myfile, '.....'); 
reset (myfile); 
read (myfile, rec); 
count:= 0; 
while not eof (myfile) do 
    begin 
    i:= 1; 
    while (i <= count) and (rec.score > data[i].score) do inc (i); //** 
    for j:= i to count do data[j+1]:= data[j];      //** 
    data[i]:= rec; 
    inc (count); 
    end; 

closefile (myfile); 
assignfile (myfile, '.......'); 
rewrite (myfile); 
for i:= 1 to count do write (myfile, data[i]); 
closefile (myfile); 
end;