Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java bubblesort赢得';我不能完全计算_Java_Algorithm_Bubble Sort - Fatal编程技术网

Java bubblesort赢得';我不能完全计算

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 我已经摆脱了我之前所做的额外代码,因为我将算法过度复杂化,因为我试图对整个列表进行排序,我已经接近计算出排序后的列表将被无限打印出来的程度,这是我作为一种变异方法进行操作时不希望看到的。此外

我已经完成了这个bubblesort算法,但它没有对列表进行完全排序。例如,如果我有数字10,9,8,7,6,它会将其排序为9,8,7,6,10,并停在那里。现在,如果您想知道为什么我将此条件置于
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循环的工作原理!哦,哇,如果我想到这个过程,我会成功的。我以后在做其他类型的算法时会提到这一点。干杯。:)