冒泡排序,这个已经很多年没有写过的算法,今天没事干用AT&T汇编实现了一遍,下面就来说说怎么用汇编来实现这个冒泡排序算法。
示例数组: 11, 9, 8, 8, 7, 10
冒泡排序的思想就是两两交换,直到数组有序为止。
过程分析:
1st: 9, 11
9, 8, 11
...
9, 8, 8, 7, 10, 11 冒泡出了一个最大的数字11
2nd: 8, 9
8, 8, 7, 9, 10, 11 冒泡出了第二大的数字10(这里比较巧合,9正好是第三大的数字,无视)
3rd: 8, 7, 8, 9, 10, 11 第三大9
4th: 7, 8, 8, 9, 10, 11 8
5th: 7, 8, 8, 9, 10, 11 没有发生交换,已然有序,直接终结算法
每次交换一轮可冒泡出一个最大的数字,对于长度为N的数组,只需交换N-1轮即可。
每交换一轮,下一轮会少一次交换。
如果某一轮没有发生交换,说明数组已经有序,直接终结算法。
综上,需要用双重循环,O(N^2)的算法来实现。
首先声明,本文对于数组有两种表示法,seq表示法,下标从1开始;index表示法,下标从0开始。伪代码一律用seq表示法,实现代码由于使用C++或者ASM,故需要转换为index表示法。
##方法1:
首先我们用seq表示法和index表示法来求出i和j的界限:
** seq_i(1, len-1)
#seq: i=1,max_j=len-1 i&