gpt4 book ai didi

java - 我的插入排序逻辑似乎是正确的,但不起作用

转载 作者:行者123 更新时间:2023-11-30 03:50:29 24 4
gpt4 key购买 nike

我正在尝试实现插入排序。

public int[] insertionSort(int[] a) {

for(int i=0; i<a.length;i++) {
int j=i+1;

while(a[j] < a[i] && j < a.length) {
swap(a[j],a[i]);
j--;
i--;
}
}
return a;
}

public void swap(int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
}

从技术上讲,这是否与我说 j = i-1 并在 while 循环中从 j < a.length 替换为 j >= 0 的条件相同(就输出结果而言)?

最佳答案

您无法以这种方式交换另一个方法中的值,因为参数传递的是值,而不是对值的引用。

您可能最好不要使用单独的方法进行交换,如下所示(还必须递增而不是递减 ij 值):

public int[] insertionSort(int[] a) {
int temp;

for(int i=0; i<a.length;i++) {
int j=i;

while(j > 0 && a[j-1] > a[j]) {
temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
j--;
}
}
return a;
}

编辑:必须再次更新 - while 循环中的条件顺序错误,因此它会在检查是否已到达数组末尾之前查找数组的下一个索引.

编辑 2:正如评论中提到的,我将展示如何编写一个实际有效的 swap 方法 - 而不是传递您必须传递的值整个数组并在之后返回它。我仍然可能建议按照上述方式进行操作,但仅用于教育目的:

public int[] insertionSort(int[] a) {

for(int i=0; i<a.length;i++) {
int j=i;

while(j > 0 && a[j-1] > a[j]) {
a = swap(a, j-1, j);
j--;
}
}
return a;
}


public int[] swap(int[] a, int index1, int index2) {
int temp = a[index1];
a[index1] = a[index2];
a[index2] = temp;
return a;
}

编辑3:正在做一些愚蠢的事情并且没有完全给出插入排序。现在全部排序(请原谅双关语)。

关于java - 我的插入排序逻辑似乎是正确的,但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com