【发布时间】: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