是否有可能,直截了当,就把资料依据大小,予以定位,一次排好?
电脑的好处,就在于资料的规律性,我们理应利用这种优点,来找出其排序的模式。
前例曾分为两个模式,一是查找,一是搬移。如果我们把查找改为记录,把搬移改为安排,则情形就大大的不同了。
记录时利用间接定址技巧,每笔取到的资料,皆可视为一个数值,对应于一记录的缓冲区。如果资料中每笔资料总值大于256 且小于 65536,则可以用二字元记录之。再若资料为二进位值,可由 0至 255,即设 512个对应单位。
假定原资料在 DS:SI中,长度在CX中。
首先,设一记录区为:
1: RECORD DB 512 DUP (0)
2: PUSH SI ;程式开始
3: CHECK:
4: LODSB ;取资料,AH永远为0
5: MOV BX,AX ;利用BX间接定址
6: INC WORD PTR RECORD[BX]
7: LOOP CHECK
8: STORE:
9: MOV SI,OFFSET RECORD+512;指向最
;后记录
10: MOV BP,OFFSET RECORD ;供检查
11: POP DI ;资料贮存处
12: STORE1:
13: CMP SI,BP ;查是否完毕?
14: JE RECEND ;完成
15: DEC SI ;向上取
16: DEC SI
17: MOV CX,[SI] ;取记录值
18: JCXZ STORE1 ;无记录,重取
19: