为什么插入排序不起作用?

时间:2014-03-25 11:54:18

标签: java

从Python切换到Java并决定编写insertionsort方法。我用Python写了这个,并试图一对一地切换代码,这一切看起来都不错,但它运行不正常。我删除了所有其他类方法/数据字段来交换空间,并试图将此代码仅限于与此问题相关的代码:

public class test1 {
    static final int NOT_FOUND = -1; // A constant

    // Attributes (just one)
    private double data[];

    // Constructor
        test1 (double data[]) {
            this.data = data.clone(); 
            }

        double getItem (int key) {
            return data[key];
        }

        void insertionSort () {
            for (int i = 1;i >= data.length;i++){
                double currentElement = data[i];
                int k = i - 1;
                while(k>=0 & data[k] > currentElement){
                    data[k+1] = data[k];
                    k -= 1;
                    data[k + 1] = currentElement;
                }
            }
        }

public static void main(String[] arg){
    double testData[] = {1,4,32,5,673,145,68,14,757};
    test1 b = new test1 (testData);

    b.insertionSort();
    //See how array has changed
    for (int i = 0; i < 9; i++) {
           System.out.print(b.getItem(i) + ", ");
        }
    }
}

3 个答案:

答案 0 :(得分:3)

更改

for (int i = 1; i >= data.length; i++)

for (int i = 1; i < data.length; i++)

背后的原因是您正在从数组data中检索i索引的项目。循环不起作用,因为i已初始化为1且条件i >= data.length返回false,因为i实际上小于{data的长度你的例子中有1}}数组,因此循环没有运行。

从数组中检索元素时,for循环中存在此类检查还有其他问题,因为如果要返回元素的索引是>=而不是数组的长度,则会得到一个IndexOutOfBoundsException异常。

答案 1 :(得分:2)

我确信这不是你的意思:

for (int i = 1;i >= data.length;i++){

这将是无限(实际上是溢出)或空循环。

答案 2 :(得分:1)

我知道这不是你要求的,但如果你正在学习Java,也许你会觉得有用:

在Java中,您可以使用Arrays.sort()

void insertionSort () {
  Arrays.sort(data);
}
相关问题