Java Shell排序算法未完成

Java Shell排序算法未完成,java,algorithm,sorting,shellsort,Java,Algorithm,Sorting,Shellsort,我的shell排序算法有问题。它是一个由50个数字组成的向量,并希望按递增顺序对其进行排序。它在开始时工作得很好,但当间隙=1时,它只迭代一次,然后停止。我认为这与while(internal

我的shell排序算法有问题。它是一个由50个数字组成的向量,并希望按递增顺序对其进行排序。它在开始时工作得很好,但当间隙=1时,它只迭代一次,然后停止。我认为这与
while(internal
条件有关,因为我希望它迭代直到向量排序。我在过去几个小时一直在努力解决这个问题,真的需要som帮助

public void shellSort() {
    int inner = 0;
    int outer = 0;
    float gap = getElementCount()/(float)2.2;

    while(inner < getElementCount()- gap) {
        for(inner = 0; inner < getElementCount() - gap; inner++) {
            outer = inner + (int)gap;
            if(cmp(outer,inner)< 0) {
                swap(outer,inner);
            }
            else {
                while(cmp(outer,inner) > 0) {
                    outer--;
                }
                if(gap!=1 && inner < outer) {
                    swap(outer,inner);
                }
            }
        }
        if(gap <= 2.2) {
            gap = 1;
        }
        else {
            gap = gap/(float)2.2;
        }
    }
}
public void shell排序(){
int内部=0;
int-outer=0;
浮动间隙=getElementCount()/(浮动)2.2;
while(内部0){
外--;
}
如果(间隙!=1&&内部<外部){
交换(外部、内部);
}
}
}
如果(gap问题与
有关,而(内部

是的,您是对的,它对第一个循环有效,但当它进入for循环时。您递增内部变量,一旦它不满足
internal
,它就从for循环中断,然后在循环之间进一步检查,并看到它不满足
internal
因此也会出现while循环

我建议您将while替换为for循环:

for (int i=0; i<getElementCount()/2; i++)

for(int i=0;i如果内部循环从未将“internal”增加到“getElementCount()-gap”之外,那么“while”条件如何返回false?错误:这个
shell
与标记
shell
相关?显然没有经过编辑。这样做是可行的,但问题是它是一种“欺骗”解决方案。即使排序已完成,算法仍会对数组进行比较。我们希望算法在排序完成后立即跳出循环。如果是这种情况,请检查交换。如果没有更多交换发生,则可以进行排序(但可能不是完全证明)。