【问题标题】:Unable to figure out why my implementation of Selection sort as a java method not working as expected无法弄清楚为什么我的选择排序作为 java 方法的实现不能按预期工作
【发布时间】:2020-04-18 10:48:06
【问题描述】:

无法弄清楚为什么我的选择排序作为 java 方法的实现没有按预期工作。

class SelectionSort {
    void SelectionSortMethod(int[] array) {
        int min, temp = 0;
        SwapClass swap = new SwapClass();
        ArrayPrinting AP = new ArrayPrinting();
        for (int i = 0; i < array.length; i++) {
            min = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[i] < array[min]) {
                    min = j;
                }
            }
            swap.SwapMethod(array[i], array[min], temp);
        }
        AP.ArrayPrintMethod(array);
    }
}
class SwapClass {
    void SwapMethod(int x, int y, int temp) {
        if(x==y) {
            return;
        }
        temp = x;
        x = y;
        y = temp;
    }
}
public class SelectionSortMainClass {
    public static void main(String[] args) {
        int[] a = { 22, -1, 34, 45, 21, -44, -33, 123, 9, 3 };
        SelectionSort sort = new SelectionSort();
        sort.SelectionSortMethod(a);
    }
}
class ArrayPrinting {
    void ArrayPrintMethod(int[] array) {
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
    }
}

我希望数组按升序排序,但输出是原始数组。
实际输出是在 main 方法中传递的原始数组.但预期的输出是数组应该按升序排序。

【问题讨论】:

  • 你的SwapMethod 是错误的(因为它交换局部变量,它不会影响数组)。除此之外,没有理由拥有SwapClass
  • @Eran 感谢您的帮助。但是我需要将不同的方法保存在单独的类中,并使用它们的类对象调用它们。我调试了 SwapMethod 并发现值从数组传递并被交换。
  • 如果你必须保留那个 SwapClass,你可以保留它,但你应该将数组和要交换的元素的索引传递给SwapMethod。当您传递要交换的值时,您无法修改数组。
  • 但是我已经在 SortMethod() 中传递数组并在外部 for 循环中调用 SortMethod() 内部的 SwapMethod() 并期望在遍历期间交换数组元素(使用外部循环)当所有代码都写在 main 方法中时,冒泡排序或选择排序的代码也会以类似的方式工作。
  • Java 是一种按值传递的语言。因此swap.SwapMethod(array[i], array[min], temp) 调用不会更改任何传递参数的值。因此array[i]array[min] 保持不变。

标签: java arrays sorting data-structures selection-sort


【解决方案1】:

在for循环的内部,array[min]需要与array[j]进行比较,而不是array[i]。

在 SwapMethod 中,数组元素没有被交换,而是变量 X 和 y 的值被交换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 2021-05-29
    • 1970-01-01
    相关资源
    最近更新 更多