gx中的冒泡排序

我们在开发程序时,经常会碰到对数组或集合的排序,我们可以使用冒泡原理来排序。

原理思路:假设我们进行降序排列,数组有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

你可能感兴趣的:(genexus)