java - 冒泡排序函数不对给定数组进行排序

标签 java arrays bubble-sort

所以基本上,我已经设置了冒泡排序算法,奇怪的是它不会只返回未排序的数组,而是返回已排序的数组。

给定的数组;

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;

最佳答案

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

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

中看到
int [] sorted = array;

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

有几种方法(Arrays.copyOf、克隆等)可以进行数组复制。例如:

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

排序错误

此外,看起来您的 for 循环中可能存在错误。您没有在这一行中遍历 j

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

因此,看起来您得到的是未排序数组的原因是数组未正确排序。

关于java - 冒泡排序函数不对给定数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50648227/

相关文章:

c++ - 比较迭代器与 ptrdiff

java - 给定一个字符串和一个非空子串,递归计算以该子串开头和结尾的最大子串并返回其长度

java - 如何将集合包装在单个父标签中

c# - 在类初始值设定项中使用隐式类型数组

php切割多维数组

C:指向数组的指针和破坏性排序

java - 如何在应用程序中创建应用内结算?

java - Rabbitmq 队列为空,尽管队列中有消息

java错误: double cannot be dereferenced

java - 这是正确的冒泡排序算法吗?