Java 为什么我的冒泡排序方法不起作用?

Java 为什么我的冒泡排序方法不起作用?,java,sorting,bubble-sort,Java,Sorting,Bubble Sort,我想试着弄明白,我只是需要被指向正确的方向。请不要只写解决方案,我想知道我需要做什么才能使它工作 static void bubbleSort() { int [] a = {1,3,4,2,5}; int [] b = new int[a.length]; int j = 0; for(int c = 0;c <= a.length;c++){//this loop doesnt even do anything?

我想试着弄明白,我只是需要被指向正确的方向。请不要只写解决方案,我想知道我需要做什么才能使它工作

    static void bubbleSort() {
        int [] a = {1,3,4,2,5};
        int [] b = new int[a.length];
        int j = 0;

        for(int c = 0;c <= a.length;c++){//this loop doesnt even do anything??? 
            for(int i = 0;i<a.length-j;i++){

                if(a[i]>a[i+1]){
                    b[i] = a[i+1];
                    b[i+1] = a[i];
                    j++;
                }
                else{
                    b[i] = a[i];
                    b[i+1] = a[i+1];
                    j++;
                }
            }
        }

        for(int i = 0; i< b.length ; i++)
            System.out.println(b[i]);
    }
static void bubbleSort(){
int[]a={1,3,4,2,5};
int[]b=新的int[a.长度];
int j=0;

对于(int c=0;c不是绝对确定的,但我认为这应该是正确的实现

static void bubbleSort() {
    int [] a = {1,3,4,2,5};
    for(int c = 0;c < a.length;c++){//now it does 
        for(int i = 0;i+1<a.length-c;i++){

            if(a[i]>a[i+1]){
                int tmp = a[i];
                a[i] = a[i+1];
                a[i+1] = tmp;
            }
        }
    }

    for(int i = 0; i< a.length ; i++)
        System.out.println(a[i]);
}
static void bubbleSort(){
int[]a={1,3,4,2,5};
对于(intc=0;c
你一次又一次地运行a,但是你改变了b,你没有比较。所以你的第一个for循环没有做任何事情。你不需要j,c工作。因为如果你在内部循环中做了1个循环,最大的数字在最后,所以你不必再次检查它。
c-loop应该一直运行到c您的代码有很多问题-

1) 您不需要额外的数组“b”,气泡排序可以就地完成

2) 考虑使用“j”,将其替换为“c”,并检查这对循环的影响

3) 您的新排序数组出现在“b”中,并且仍然在每一步检查条件-

if(a[i]>a[i+1])
你不认为“b”在这里有作用吗


如果您仍然有问题,请考虑以上几点,并在本文中发表评论。

您应该使用调试器逐行检查您的程序,以发现其行为与您所希望的不同之处。此外,如果您告诉我们什么不起作用,也会有所帮助。输出是什么?您希望输出是什么?您已经尝试了哪些导致改进的方法?你认为问题出在哪里?使用链接进行进一步的改进。祝你好运!:)提示:为什么要同时复制和排序?System.out打印什么?1, 3, 2, 4, 5? 如果要将结果保存在另一个数组中,则应将其保存在a而不是b中,并使用temp变量保存该值。c不做任何事情,你不能在你的代码中使用它。你只需要从c到a运行,基本上你只需要不断重复同样的东西。完全取消
b
,只对
a
进行排序。(在网上找到气泡排序的单词/图表描述,并按照它进行操作。)有一个
家庭作业
标签,这意味着你不应该只给出正确的代码,再加上OP明确表示(即使在问题的原始版本中)他们不想得到代码,他们想理解代码。我建议删除代码,充实一下你的解释。我修正了他的程序,然后解释了它。他希望他的代码被修改,而不是你所做的新实现,我相应地编辑了我的评论。不管怎样,由于标签和OP显式指令,我认为您不应该包含代码