如何在groovy脚本中将数组排序为3个元素的组

如何在groovy脚本中将数组排序为3个元素的组,groovy,soapui,Groovy,Soapui,我是groovy脚本编写新手,尝试在数组下面进行排序,其中排序是作为三个元素的一组进行的 I/p:a=[9,4,5,8,9,7,4,2,3] 预计O/P:4,5,9,7,8,9,2,3,4 我尝试了许多组合,但我发现我的循环要么进入无限循环,要么只能对第一组三个元素进行排序 for (int i = 0; i < a.size()-1; i++) { for (int j = i + 1; j<3; j++) { if (a[i] > a

我是groovy脚本编写新手,尝试在数组下面进行排序,其中排序是作为三个元素的一组进行的

I/p:a=[9,4,5,8,9,7,4,2,3] 预计O/P:4,5,9,7,8,9,2,3,4

我尝试了许多组合,但我发现我的循环要么进入无限循环,要么只能对第一组三个元素进行排序

for (int i = 0; i < a.size()-1; i++) {    
    for (int j = i + 1; j<3; j++) {    
        if (a[i] > a[j]) `enter code here`
        {
            temp = [0]
            temp = a[i]
            a[i] = a[j]
            a[j] = temp
        }
    }
}

for (int i = 0; i < a.size()-1; i++) {
    log.info a[i]+ ","
}
log.info "Data in ascending order" + a 
for(inti=0;i

非常感谢您的帮助。

Groovy对于此类任务非常强大:

def a = [9, 4, 5, 8, 9, 7, 4, 2, 3]
def sorted = a.collate( 3 ).collect{it.sort()} 
assert sorted == [[4, 5, 9], [7, 8, 9], [2, 3, 4]]
assert sorted.flatten() == [4, 5, 9, 7, 8, 9, 2, 3, 4]

这里有一种方法。它不是最Groove的代码,但它既简单又相当接近原始代码。主要技术是将a与步骤一起使用(以便
i
从0,3,6开始):


您正在尝试使用冒泡排序,但方式不正确

第一个问题是(a[i]>a[j]),这里i是常数,在冒泡排序中我们使用j和j+1,因为我们比较两个连续的元素。如果我们把i保持在这里,那么i在循环中是常数

第一组元素正在为您排序,因为前3个元素是9 4 5,因为9>4,所以您交换了,而再次是9>5,所以交换完成了,所以它们被交换了

冒泡排序的另一件事是我们需要2个循环进行排序。在一次遍历中,仅对相邻元素进行排序。i、 假设元素是3 2 1。所以它将类似于231(2,3),然后是213(1,3)。你需要再进行1次迭代(外循环)才能达到1 2 3

下面是冒泡排序逻辑,它使用与您相同的逻辑,并提供您需要的输出,而无需使用任何可用的特殊方法

我试图找出无限的逻辑,但没能破解它

下面的代码以最简单的方式工作

1) 第一个循环是将2个元素分成3个元素的集合。。。所以我们选择1 4 8元素

2) 第三个循环以第一个循环决定的元素开始

3) 第二个循环负责3个元素的排序(冒泡排序需要2个循环)

defa=[9,4,5,8,9,7,4,2,3];
def温度=0;
打印“ok”;

对于(int i=0;我非常感谢您的快速回复。但是我们不支持使用排序方法来完成。为什么?好的,那么:a.collate(3)。collect{[it.min(),it-it.min()-it.max(),it.max()].flatte()}@cfrick,是的。但是当我使用i+3时,我的将进入无限循环:(
def a = [9, 4, 5, 8, 9, 7, 4, 2, 3] 
def n = a.size() - 1
assert a.size() % 3 == 0

def result = []

// i = 0, 3, 6 
for (i in (0..n).step(3)) {
    def list = [a[i], a[i+1], a[i+2]]
    def x = list.min()
    def z = list.max()
    def y = list.find { item -> item != x && item != z }
    result.addAll([x, y, z])
}

assert [4,5,9,7,8,9,2,3,4] == result
def a = [9, 4, 5, 8, 9, 7, 4, 2, 3] ;
def temp=0;
print "ok";
for(int i =0; i <a.size(); i=i+3)
{
print a[i] + " "
for(int k=0; k<2;k++)
{
for(int j=i;j<i+2;j++)
{
//  print a
    if(a[j]>a[j+1])
    {
        temp=a[j];
        a[j]=a[j+1];
        a[j+1]=temp;

    }
}
}
}

log.info a