Shell排序算法没有完成

时间:2015-02-23 16:51:28

标签: java algorithm sorting shellsort

我的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;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题出在while(inner < getElementCount()- gap){

是的,你是对的,它可以用于第一次循环,但是当它进入for循环。你增加内部变量,一旦它不满足inner < getElementCount() - gap,它就会从for循环中断,然后检查while循环以进一步循环并看到它不会inner < getElementCount() - gap因此从同时循环。

我建议你用for循环替换:

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