bubblesort无法完全计算

时间:2013-09-05 22:19:42

标签: java algorithm bubble-sort

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

我已经摆脱了我之前做的额外代码,因为我过度复杂了算法,因为我试图将整个列表排序,我接近计算到排序列表无限打印的程度,这是我的事情。当我把它作为一个mutator方法时,我不想要。另外,有些人认为我在那里做的修改不是bubblesort,即使算法比较和交换元素就像bubblesort一样。因此,这就是为什么我决定删除我之前工作过的额外代码。

我的问题是如何让整个列表排序?由于到目前为止算法没有这样做。

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

1 个答案:

答案 0 :(得分: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;
         }
       }
   }
}