从 Python 切换到 Java 并决定编写插入排序方法。我用 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) + ", ");
}
}
}
最佳答案
改变
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
数组的长度,因此循环没有运行。
从数组中检索元素时,for 循环中的这种检查还存在其他问题,因为如果要返回元素的索引 >=
大于数组的长度您将得到一个 IndexOutOfBoundsException。
关于java - 为什么插入排序不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22633837/