gpt4 book ai didi

java - 数组排序将一个元素留在错误的位置

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:54 25 4
gpt4 key购买 nike

我正在尝试按升序对数组进行排序,但遇到了一个问题。该代码对数组进行排序,但它采用最后一个数字并将其放在数组的第一个位置。因此,例如,当排序 2、3、4、1 时,输出为 4、1、2、3。如何将数字 4 移到数字 3 后面?

public class Main {
public static void main(String[] args) {
int[] numbers = {2, 3, 1, 4};
int holder = 0;

for(int i = 0; i < numbers.length; i++){
for(int j = 1; j < numbers.length; j++){
if(numbers[i] < numbers[j]){
holder = numbers[i];
numbers[i] = numbers[j];
numbers[j] = holder;
}
}
}

// prints array
for(int i = 0; i < numbers.length; i++){
System.out.println(numbers[i]);
}
}
}

输出:

4
1
2
3

最佳答案

主要有两个问题。

一个是您将某些元素交换两次。你想始终确保 i小于 j这样numbers[i]numbers[j] 的左边.您的循环工作方式,在以后的迭代中 j开始低于 i .例如,当 i是 2 内部循环以 j 开头在 1。要解决此问题,您可以随时开始 ji 高 1 位:

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

如果你解决了这个问题,你会注意到第二个问题:数组是反向排序的!那是因为 <比较是倒退的。您希望在左侧的项目大于 时交换项目,而不是在右侧的项目较小时交换项目。如果它更小,它们的顺序就已经正确了。

if(numbers[i] > numbers[j])

关于java - 数组排序将一个元素留在错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885025/

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