【问题标题】:Bubble sort function does not sort the given array冒泡排序函数不对给定数组进行排序
【发布时间】:2018-11-11 21:06:06
【问题描述】:

所以基本上,我已经设置了冒泡排序算法,但奇怪的是它并没有返回排序后的数组,而是返回未排序的数组。

给定的数组;

int[] array = { 20, 5, 1, 6, 23, 52, 15, 12 };

冒泡排序算法;

public static int[] sort_array(int[] array) {

    int [] sorted = array;
    int temp = 0;

    for (int i = 0; i < sorted.length - 1; i++) {
        for (int j = 0; i < sorted.length - i - 1; i++) {
            if (sorted[j] > sorted[j + 1]) {
                temp = sorted[j];
                sorted[j] = sorted[j + 1];
                sorted[j + 1] = temp;
            }
        }
    }
    return sorted;
}

还做了一个数组返回方法;

public static void return_list(int[] array) {

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

使用方法后,它只返回未排序的数组。

int[] array = { 20, 5, 1, 6, 23, 52, 15, 12 };

sort_array(array);

return_list(array);

输出 = 20、5、1、6、23、52、15、12;

【问题讨论】:

    标签: java arrays bubble-sort


    【解决方案1】:

    有一个错误: 在这里用 j 替换 i ->for(int j=0;i(这里)

    【讨论】:

      【解决方案2】:

      您每次都在检查 i 的值,并在每次迭代时增加它的值

      for (int j = 0; i < sorted.length - i - 1; i++)
      

      【讨论】:

        【解决方案3】:

        复制一个数组(假设你想保留原来的)

        首先,您不会在此处将array 复制到sorted。您正在复制数组的引用以进行排序,因此对 sorted 内容的任何更改也将在 array 中看到

        int [] sorted = array;
        

        执行此操作以实例化一个新数组 sorted 并将 array 中的内容复制到其中: Make copy of array

        有几种方法(Arrays.copyOf、clone 等)来进行数组复制。例如:

        int[] sorted = Arrays.copyOf(array, array.length);
        

        排序错误

        此外,您的 for 循环中似乎存在错误。您没有在这一行中迭代 j

        for (int j = 0; i < sorted.length - i - 1; i++)
        

        所以,看起来你得到一个未排序数组的原因是该数组没有正确排序。

        【讨论】:

          猜你喜欢
          • 2020-05-17
          • 1970-01-01
          • 2017-01-24
          • 1970-01-01
          • 2020-07-17
          • 2017-05-29
          • 2016-02-10
          • 1970-01-01
          • 2016-04-04
          相关资源
          最近更新 更多