Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 缩短冒泡排序循环_Java_Sorting_Bubble Sort - Fatal编程技术网

Java 缩短冒泡排序循环

Java 缩短冒泡排序循环,java,sorting,bubble-sort,Java,Sorting,Bubble Sort,我已经更改了我的冒泡排序,因为在排序的每个步骤中,应用程序都会遍历整个列表 这是不必要的,因为在第一次遍历之后,最小的项将位于列表的末尾,而在第二次遍历之后,第二个最小的项将位于其正确的位置(倒数第二个),依此类推。我有点不确定到底需要改变什么 我需要修改冒泡排序,这样它就不会执行不必要的比较 private void bubbleSort(){ int currentCount=0; 显示状态(“排序…”); 布尔交换=真; while(互换){ 交换=假; 对于(int i=0;i

我已经更改了我的冒泡排序,因为在排序的每个步骤中,应用程序都会遍历整个列表

这是不必要的,因为在第一次遍历之后,最小的项将位于列表的末尾,而在第二次遍历之后,第二个最小的项将位于其正确的位置(倒数第二个),依此类推。我有点不确定到底需要改变什么

我需要修改冒泡排序,这样它就不会执行不必要的比较

private void bubbleSort(){
int currentCount=0;
显示状态(“排序…”);
布尔交换=真;
while(互换){
交换=假;
对于(int i=0;i}//bubbleSort private void bubbleSort(){
冒泡排序将执行不必要的比较,这就是为什么您不在生产中对任何合理大小的数据集使用它的原因。特别是关于您的代码。请简单看一下(因为我不想再写一次,你只能在学校里写)看起来它做了完全相同数量的比较。如果你想要一个足够大的N的真正好的排序算法,尝试合并排序

参考文献

public static <E extends Comparable<? super E>> void bubbleSort(E[] comparable) {
    boolean changed = false;
    do {
        changed = false;
        for (int a = 0; a < comparable.length - 1; a++) {
            if (comparable[a].compareTo(comparable[a + 1]) > 0) {
                E tmp = comparable[a];
                comparable[a] = comparable[a + 1];
                comparable[a + 1] = tmp;
                changed = true;
            }
        }
    } while (changed);
}

publicstatic首先,在for循环的第一次迭代结束时,最大的元素将位于数组的末尾,而不是最小的

如果要修改代码以保存不需要的比较,可以检查上一次比较,并使用If作为下一个for循环的结束

考虑以下代码:(我希望
java
allow while(int)-我不是
java
expert…)

integer swap=items.length-1;
while(互换){
交换=0;
整数lastSwap=swap;
for(int i=0;i
请删除不必要的代码
integer swap = items.length - 1;
while (swap) {
    swap = 0;
    integer lastSwap = swap ;
    for (int i = 0; i < lastSwap ; i++) {
        if (greaterThan(items[i], items[i + 1])) {
           swapItems(items[i], items[i + 1]);
           swap = i;
           currentCount++;
        }
     } // for
  } // while