Java bubblesort赢得';我不能完全计算
我已经完成了这个bubblesort算法,但它没有对列表进行完全排序。例如,如果我有数字10,9,8,7,6,它会将其排序为9,8,7,6,10,并停在那里。现在,如果您想知道为什么我将此条件置于Java bubblesort赢得';我不能完全计算,java,algorithm,bubble-sort,Java,Algorithm,Bubble Sort,我已经完成了这个bubblesort算法,但它没有对列表进行完全排序。例如,如果我有数字10,9,8,7,6,它会将其排序为9,8,7,6,10,并停在那里。现在,如果您想知道为什么我将此条件置于if(I+1args[I+1])时,由于索引增加到5,我得到了IndexOutOfBoundsException 我已经摆脱了我之前所做的额外代码,因为我将算法过度复杂化,因为我试图对整个列表进行排序,我已经接近计算出排序后的列表将被无限打印出来的程度,这是我作为一种变异方法进行操作时不希望看到的。此外
if(I+1
中,这是因为在进行此比较if(currentNumber>args[I+1])时,由于索引增加到5,我得到了IndexOutOfBoundsException
我已经摆脱了我之前所做的额外代码,因为我将算法过度复杂化,因为我试图对整个列表进行排序,我已经接近计算出排序后的列表将被无限打印出来的程度,这是我作为一种变异方法进行操作时不希望看到的。此外,有些人认为我在那里所做的修改没有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;
}
}
包算法;
导入java.util.array;
公共类算法{
/**
*@param指定命令行参数
*/
私有静态int-list[]={10,9,8,7,6};
公共算法(){
}
公共静态void main(字符串[]args){
算法alg=新算法();
气泡运动(列表);
}
公共int[]bubblesort(int[]args){
对于(int i=0;iargs[i+1]){
args[i]=args[i+1];
args[i+1]=当前编号;
}
}
}
System.out.println(Arrays.toString(args));
返回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;
}
}
}
}
for(int j=0;jargs[i+1]){
args[i]=args[i+1];
args[i+1]=当前编号;
}
}
}
}
One loop我不会对您的列表进行排序。冒泡排序是O(n*n)好吧,它在O(n)中运行的事实应该是您的第一个提示;)据我所知,目前你只“冒泡”了一个元素。哦,我现在明白了。这让我想起了我做的一个2D游戏,我有身体对象,我必须创建一个金字塔,这就是for循环的工作原理!哦,哇,如果我想到这个过程,我会成功的。我以后在做其他类型的算法时会提到这一点。干杯。:)