我们在开发程序时,经常会碰到对数组或集合的排序,我们可以使用冒泡原理来排序。
原理思路:假设我们进行降序排列,数组有n个元素,从第1个元素开始,两两逐一比较,如果元素1 < 元素2 ,交换值(值值交换,不是地址交换) ,比较n - 1次,最后一个元素是最小值。再循环从第1个元素,进行n - 2 次比较。最后比较出来的就是升序排列了。我们注意了,冒泡排序的比较次数是(n - 1 )+ (n - 2)+ 。。。+ 1
假设数组为如下 ,我们定义数组 &myArray ,vector (10)
10 |
2 |
4 |
1 |
7 |
举例:
&myArray(1) = 9
&myArray(2) = 3
&myArray(3) = 5
&myArray(4) = 6
&myArray(5) = 1
&myArray(6) = 8
&myArray(7) = 7
&myArray(8) = 6
&myArray(9) = 4
&myArray(10) = 10
&icount = Rows(&myArray())
//降序排列
for &i = &icount - 1 to 1 step -1//比较次数
for &j = 1 to &i
if &myArray(&j + 1) > &myArray(&j)
&tmp = &myArray(&j)
&myArray(&j) = &myArray(&j + 1)
&myArray(&j + 1) = &tmp
endif
endfor
endfor
这样,我们就已经降序排列了。
gx中的冒泡排序,我们可以运用这个原理对grid,sdt,数组等等集合数据进行排序,同时我们可以做些特殊的排序,不一定是升序或降序,也可以做些升序中有降排列,降序中有升排列
只需要在
if &myArray(&j + 1) > &myArray(&j)
//再这里可以加自定义的条件,做特殊的升序中有降排列,降序中有升排列条件。
&tmp = &myArray(&j)
&myArray(&j) = &myArray(&j + 1)
&myArray(&j + 1) = &tmp
endif