【问题标题】:Having trouble with bubble sort Java冒泡排序Java遇到问题
【发布时间】:2017-10-01 13:33:48
【问题描述】:

我正在尝试实现冒泡排序,但它不起作用!帮我找出问题。

代码:

public class Main {   

  public static int e=0;
    public static int arraylength;
    public static int[] array = new int[10];

    public static void main(String[] args) {
        Random random = new Random();
        for(int i=0;i<array.length;++i){
            array[i]=random.nextInt(10);
            System.out.print(" "+array[i]);
        }   
        arraylength=array.length;
        for (int i =0;i<arraylength;i++) {
            arraylength--;
            for (int j = 0; j < arraylength - 1; j++) {
                if (array[j] > array[j + 1]) {
                    e = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = e;
                }
            } 
        }   
    }
}

控制台:

输入 arr:5 1 5 4 7 8 7 7 2 8

输出:1 4 5 2 5 7 7 7 8 8

public class Main {

    public static int e=0;
    public static int arraylength;
    public static int[] array = new int[10];

    public static void main(String[] args) {
        Random random = new Random();
        for(int i=0;i<array.length;++i){
            array[i]=random.nextInt(10);
            System.out.print(" "+array[i]);
        }

        System.out.println();
        arraylength=array.length;
        for (int i =0;i<arraylength;i++) {
            arraylength--;
            for (int j = 0; j < array.length - 1; j++) {
                if (array[j] > array[j + 1]) {
                    e = array[j + 1];
                    array[j + 1] = array[j];
                    array[j] = e;
                }
            }
        }
        for(int i=0;i<array.length;++i){
            System.out.print(" "+array[i]);
        }
    }
}

输入 arr:7 7 4 1 2 9 6 4 9 6

输出:1 2 4 4 6 6 7 7 9 9

它有效,但有时:

输入 arr:5 2 2 3 9 6 7 7 0 6

输出:2 2 3 0 5 6 6 7 7 9

【问题讨论】:

标签: java sorting bubble-sort


【解决方案1】:

改变

for (int i =0; i<arraylength; i++) {

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

外部循环需要为数组中的每个元素运行一次,而您不能对 arraylength 变量执行此操作,因为您正在减小它的值,即在第一次迭代之后,arraylength 不再等于 array.length

【讨论】:

    【解决方案2】:
    public static int e=0;
    public static int arraylength;
    public static int[] array = new int[10];
    
    public static void main(final String[] args) {
        final Random random = new Random();
        for(int i=0;i<array.length;++i){
            array[i]=random.nextInt(10);
            System.out.print(" " + array[i]);
        }
        System.out.println();
    
        arraylength = array.length;
        for (int i =0;i<arraylength;i++) {
    
            for (int j = 1; j < arraylength - i; j++) {
                if (array[j - 1] > array[j]) {
                    e = array[j - 1];
                    array[j - 1] = array[j];
                    array[j] = e;
                }
            }
        }
        for (final int element : array) {
            System.out.print(" " + element);
        }
    }
    

    你不需要每次在数组上循环时减小arraylength的值

    【讨论】:

      【解决方案3】:

      试试这个:

      public class Main {
      
          public static int e=0;
          public static int[] array = new int[10];
      
          public static void main(String[] args) {
              Random random = new Random();
              for(int i=0;i<array.length;++i){
                  array[i]=random.nextInt(10);
                  System.out.print(" "+array[i]);
              }
      
              System.out.println();
              for (int i =0;i<array.length;i++) {
                  for (int j = 0; j < array.length - 1; j++) {
                      if (array[j] > array[j + 1]) {
                          e = array[j + 1];
                          array[j + 1] = array[j];
                          array[j] = e;
                      }
                  }
              }
              for(int i=0;i<array.length;++i){
                  System.out.print(" "+array[i]);
              }
          }
      }
      

      线

      arraylength--;
      

      导致问题。您无需更改该值,因为它会影响 for 循环的工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-03
        • 2023-03-07
        • 2020-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多