【问题标题】:bubblesort won't fully compute冒泡排序不会完全计算
【发布时间】:2013-09-05 22:19:41
【问题描述】:

我已经完成了这个冒泡排序算法,但它没有对列表进行完全排序。例如,如果我有数字 10,9,8,7,6,它会将其排序为 9,8,7,6,10 并停在那里。现在如果你想知道为什么我把这个条件放在if (i + 1 < args.length) 这是因为我得到一个 IndexOutOfBoundsException 因为在进行比较时索引增加到 5if (currentNumber > args[i + 1])

我已经摆脱了我之前做的额外代码,因为我试图让整个列表排序而使算法过于复杂,我接近于计算出排序后的列表将被无限打印的程度,这是我的当我把它作为一种变异方法时,我不想这样做。此外,有些人认为我在那里所做的修改不是冒泡排序,即使算法像冒泡排序一样比较和交换元素。因此,这就是我决定删除之前处理​​的额外代码的原因。

我的问题是如何对整个列表进行排序?由于到目前为止的算法还没有做到这一点。

package algorithm;

import java.util.Arrays;

public class Algorithm {

/**
 * @param args the command line arguments
 */
private static int list[] = {10, 9, 8, 7, 6};

public Algorithm() {
}

public static void main(String[] args) {

    Algorithm alg = new Algorithm();

    alg.bubblesort(list);

}

public int[] bubblesort(int[] args) {
    for (int i = 0; i < args.length; i++) {

        int currentNumber = args[i];
        if (i + 1 < args.length) {
            if (currentNumber > args[i + 1]) {
                args[i] = args[i + 1];
                args[i + 1] = currentNumber;
            }
        }

    }
    System.out.println(Arrays.toString(args));
    return args;
}
}

【问题讨论】:

  • 一个循环我不会对你的列表进行排序。冒泡排序是 O(n*n)
  • 嗯,它在 O(n) 中运行的事实应该是您的第一个提示;)据我所知,目前您只能“冒泡”一个元素。

标签: java algorithm bubble-sort


【解决方案1】:

冒泡排序是使用两个嵌套循环完成的,您只有将最大数字移动到数组的最后一个索引的内循环,您需要像这样添加外循环:

for (int j = 0; j < args.length; j++) {
   for (int i = 0; i < args.length - j; i++) {
       int currentNumber = args[i];
       if (i + 1 < args.length) {
         if (currentNumber > args[i + 1]) {
            args[i] = args[i + 1];
            args[i + 1] = currentNumber;
         }
       }
   }
}

【讨论】:

  • 哦,我现在明白了。这让我想起了我做的一个 2D 游戏,我有身体物体,我必须创建一个金字塔,这就是 for 循环的工作原理!哦,哇,如果我想到这个过程,我会成功的。好吧,我将来在做其他类型的算法时会涉及到这一点。干杯。 :)
猜你喜欢
  • 1970-01-01
  • 2016-04-04
  • 2016-03-19
  • 1970-01-01
  • 2013-09-04
  • 2013-11-02
  • 2018-02-08
  • 2016-11-01
  • 2014-12-30
相关资源
最近更新 更多