我的shell排序算法存在问题。它是50个数字的向量,并希望按递增顺序对其进行排序。它在开始时工作正常但是当间隙= 1时它只迭代一次然后停止。我认为它与while(inner < getElementCount()- gap){
条件有关,因为我希望它迭代直到向量被排序。在过去的几个小时里,我一直在努力解决这个问题,真的需要帮助!
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;
}
}
}
答案 0 :(得分:0)
问题出在while(inner < getElementCount()- gap){
是的,你是对的,它可以用于第一次循环,但是当它进入for循环。你增加内部变量,一旦它不满足inner < getElementCount() - gap
,它就会从for循环中断,然后检查while循环以进一步循环并看到它不会inner < getElementCount() - gap
因此从同时循环。
我建议你用for循环替换:
for (int i=0; i<getElementCount()/2; i++)