我已经做了这个bubblesort算法,但它没有完全排序列表。例如,如果我有数字10,9,8,7,6,它会把它排序为9,8,7,6,10,然后停在那里。现在,如果你想知道为什么我把这个条件放在if (i + 1 < args.length)
中,这是因为我得到了一个indexoutboundsexception,因为在进行这个比较时,索引增加到5。
我已经去掉了之前做的额外代码,因为我对算法进行了过度复杂化,因为我试图对整个列表进行排序,而我已经接近计算出排序列表将无限打印的程度,这是我作为一个变异器方法进行排序时不想要的。另外,有些人认为我在那里做的修改没有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;
}
}
最佳答案
气泡排序是使用两个嵌套循环完成的,您只有将最大数移动到数组的最后一个索引的内部循环,您需要像这样添加外部循环:
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;
}
}
}
}