Java Shell排序算法未完成
我的shell排序算法有问题。它是一个由50个数字组成的向量,并希望按递增顺序对其进行排序。它在开始时工作得很好,但当间隙=1时,它只迭代一次,然后停止。我认为这与Java Shell排序算法未完成,java,algorithm,sorting,shellsort,Java,Algorithm,Sorting,Shellsort,我的shell排序算法有问题。它是一个由50个数字组成的向量,并希望按递增顺序对其进行排序。它在开始时工作得很好,但当间隙=1时,它只迭代一次,然后停止。我认为这与while(internal
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
相关?显然没有经过编辑。这样做是可行的,但问题是它是一种“欺骗”解决方案。即使排序已完成,算法仍会对数组进行比较。我们希望算法在排序完成后立即跳出循环。如果是这种情况,请检查交换。如果没有更多交换发生,则可以进行排序(但可能不是完全证明)。