【问题标题】:Why isnt my bubble sort method working?为什么我的冒泡排序方法不起作用?
【发布时间】:2012-06-26 06:08:14
【问题描述】:

我想弄清楚,我只是需要指出正确的方向。请不要只写解决方案,我想了解我需要做什么才能使其工作。

    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]);
    }

【问题讨论】:

  • 您应该使用调试器逐行检查您的程序,以发现其行为与您希望的不同之处。
  • 另外,如果您告诉我们究竟是什么不工作,它会有所帮助。输出是什么?你期望输出是什么?您已经尝试过哪些导致改进的方法?你认为问题可能出在哪里?使用edit 链接进行进一步改进。祝你好运! :)
  • 提示:为什么要同时进行复制和排序?
  • System.out 打印什么? 1、3、2、4、5?您将您的结果保存在不同的数组中,您应该将其保存在 a 而不是 b 中,并使用临时变量来保存该值。而 c 没有做任何事情 ^^ 你没有在你的代码中使用它。您只需将其从 c 运行到 a.length
  • 你基本上只是一遍又一遍地重复同样的东西。完全取消 b 并仅排序 a。 (在网上找一个关于冒泡排序的单词/图表描述并按照它。)

标签: java sorting bubble-sort


【解决方案1】:

你的代码有很多问题 -

1) 不需要额外的数组 'b',冒泡排序可以就地完成。

2) 考虑使用 'j',将其替换为 'c' 并检查这对循环有何影响。

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

if(a[i]>a[i+1])

你不觉得'b'在这里可以发挥作用吗?

如果您仍有问题,请考虑以上几点并评论此帖子。

【讨论】:

    【解决方案2】:

    不确定,但我认为这应该是正确的实现

    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]);
    }
    

    你一次又一次地跑过a,但你改变了b,你没有比较。所以你的第一个 for 循环什么也没做。你不需要 j,c 可以工作。因为如果你在内循环中做了1个循环,最大的数字在最后,所以你不必再次检查它。 c循环应该运行到c

    【讨论】:

    • 有一个Homework 标签,这意味着你不应该只给出更正的代码加上OP明确声明(即使在问题的原始版本中)他们不想被给出代码,他们想了解它。我建议删除代码并充实您的解释。
    • 我更正了他的程序并在之后进行了解释。他希望修改他的代码,而不是新的实现
    • 你做到了,我相应地编辑了我的评论。无论哪种方式,由于标签和 OP 明确说明,我认为您不应该包含代码
    猜你喜欢
    • 2015-06-29
    • 2019-11-23
    • 2017-04-04
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多