Bubblesort不适用于Java,元素不交换

Bubblesort不适用于Java,元素不交换,java,bubble-sort,Java,Bubble Sort,我的测试代码如下: import java.util.Arrays; class Scratch { public static void main(String[] args) { int[] list = {5,4,1,651,68,7,486,49,3,4,6}; bubblesort(list); System.out.println(Arrays.toString(list)); } private stati

我的测试代码如下:

import java.util.Arrays;

class Scratch {
    public static void main(String[] args) {
        int[] list = {5,4,1,651,68,7,486,49,3,4,6};
        bubblesort(list);
        System.out.println(Arrays.toString(list));

    }
    private static void bubblesort(int[] a) {
        int[] list = a;
        for (int i = 0; i < list.length - 1; i++) {
            for (int j = 0; j < list.length - i - 1; j++) {
                if (list[j] > list[j + 1]) {
                    int temp = list[j];
                    list[j] = list[j + 1];
                    list[j] = temp;
                }
            }
        }
    }
}

我做了多次测试,比如使用return或设置另一个变量。但我的方法都不管用

简单看一下,我认为您的问题是您连续两次设置了
列表[j]


你应该在你的
语句的最后一行设置
列表[j+1]=temp
,如果你的
语句简单看一下,我想你的问题是你连续两次设置
列表[j]

int temp = list[j]; list[j] = list[j + 1]; list[j+1] = temp;
您应该在您的
if
语句的最后一行中设置
列表[j+1]=temp

int temp = list[j]; list[j] = list[j + 1]; list[j+1] = temp;
您正在将列表[j]值分配给temp,并将temp值重新分配给列表[j],因此输出没有变化。所以那里没有发生交换


您正在将列表[j]值分配给temp,并将temp值重新分配给列表[j],因此输出没有变化。所以那里没有发生交换

将if块替换为该块

if (list[j] > list[j + 1]) {
   int temp = list[j];
   list[j] = list[j + 1];
   list[j+1] = temp;
}

用此块替换if块

if (list[j] > list[j + 1]) {
   int temp = list[j];
   list[j] = list[j + 1];
   list[j+1] = temp;
}

您是否使用调试器或使用print语句查看了这一过程?我在list[j]=list[j+1]之前和之后使用了print语句;对于列表[j],列表[j]没有改变look at
list[j]=list[j+1];列表[j]=温度非常接近。您是否使用调试器或使用print语句查看了这一过程?我在list[j]=list[j+1]之前和之后使用了print语句;对于列表[j],列表[j]没有改变look at
list[j]=list[j+1];列表[j]=温度接近。