冒泡在Java中排序 - 最终排序中未显示的最大整数

时间:2014-03-13 08:48:45

标签: java algorithm sorting presentation

我正在尝试为我正在做的小型演示文稿创建一个冒泡排序程序。代码运行正常,但我的数组中的最大整数永远不会显示。目前的计划输出是:

1
3
4
6
7
11

12失踪了!

这是我的代码,请原谅评论 - 其中一些甚至可能是错误的。

public class BubbleSort {

public static void main(String[] args) {

    int number []={6,3,1,7,4,12,11};
                // 0,1,2,3,4

    //For temporarily storing a value that has to be swapped
    int temp;

    //Keeps the loop running until there is nothing left to sort.
    boolean fixed=false;

    while (fixed==false) {

    fixed=true;

    //If this IF statement is accessed it means something still has to be
    //swapped, so at the end of the statement fixed is reverted to false
    //again, so it can continue the loop.


    for(int i=0; i<number.length-1 ; i++){  
        //This makes i start at 0 the first time it is run,
        //this is due to the array starting at 0, too.


        if(number[i] > number[i+1]) {
            //If 8   >   5

            temp = number[i+1];
            //Store 5 in temporary variable

            number[i+1]=number[i];
            //Swap array 1 with array 0/

            number[i]=temp;

            fixed=false;

        }


    }


    }

    for(int i=0; i<number.length-1 ; i++){
        System.out.println(number[i]);
    }

}

}

4 个答案:

答案 0 :(得分:3)

for(int i=0; i<number.length-1; i++){
    System.out.println(number[i]);
}

应该是

//                            no '-1'
//                              V
for(int i = 0; i < number.length; i++) {
    System.out.println(number[i]);
}

<强>为什么吗

让我们看看如果数组中有5个元素会发生什么,然后将它们编入索引如下:

0, 1, 2, 3, 4

如果我们使用i < 5-1(或i < 4),一旦i变为4,则在循环的下一次迭代运行之前,它将停止,跳过最后一个索引。

如果上述内容没有解释,请注意for循环中发生事情的顺序:

  • 首先进行初始化
  • 然后重复以下操作,直到条件为假:
    • 检查条件
    • 运行循环迭代
    • 增量发生

这里最适用的部分是如果条件为假,循环迭代将永远不会运行。

答案 1 :(得分:2)

错误出现在显示数字的最后一个循环中。

你的循环没有到达最后一个元素,因为它在number.length-2中停止。您必须在循环中再添加一个执行。

尝试:

for(int i=0; i<number.length ; i++){
        System.out.println(number[i]);
    }

for(int i=0; i<=number.length-1 ; i++){
            System.out.println(number[i]);
        }

答案 2 :(得分:0)

for(int i=0; i<number.length-1 ; i++){
    System.out.println(number[i]);

打印数组时,请删除-1仅写number.length

答案 3 :(得分:0)

你使用了错误的结束循环条件

       for(int i=0;i<number.length;i++)

因为数组索引从0开始。