发布于 2012-07-10 22:06:07
7楼
我想到一点先说一点。我的原则是源数据不动。
另外开辟一块区域,大小跟源数据的个个个数数数一样大小。里面放置源数据的序号。由0(或1开始)加加加一一一递增到最后。表示第一个数;第二个数;第三个数……
冒泡的时候用的比较指令的两个操作数都用间接寻址。第一次比较要比较VD1000和VD1004。那么按照间接寻址,第一个操作数变成(0*4+1000)=1000。然后在1000的前面加上16#800。也就是16#8001000。第二个操作数变成(1*4+1000)=1004。16#8001004。然后就比较这两个间接寻址目标的值。
比较后得到结果。假如符合比较关系,不用管。不符合比较关系的,调换位置。这回调换位置就不是调换目标的值,而是调换序号的这一块的前两个序号,也就是序号0和序号1。经过这样的调换序号变成了1 0 2 3 4 5 ……
就这样,比较是比较目标的实数,换位是换序号的次序。由于序号可以用字节表示(最多可以排序256个值)省下不少的空间。而且数据源不需要移动。但是指针操作相当多。每一次比较都要确立一次指针,任务非常繁重。