Java:插入排序算法交换

Java:插入排序算法交换,java,algorithm,insertion-sort,Java,Algorithm,Insertion Sort,亲爱的飞越者们 我的swap方法在insertionSort方法中不起作用;它不是交换我的数组元素 我的插入排序算法有什么问题 package AlgoExercises; import java.util.Arrays; public class InsertionSort { static int[] numbersArray = { 5, 2, 4, 6, 1, 3 }; static void swap(int a, int b) { int temp = a;

亲爱的飞越者们

我的swap方法在insertionSort方法中不起作用;它不是交换我的数组元素

我的插入排序算法有什么问题

package AlgoExercises;

import java.util.Arrays;

public class InsertionSort {

  static int[] numbersArray = { 5, 2, 4, 6, 1, 3 };

  static void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
  }

  static void insertionSort(int[] numbersArray) {
    for (int i = 1; i < numbersArray.length - 1; i++) {
      int j = i;
      while ((j > 0) && (numbersArray[j] < numbersArray[j - 1])) {
        swap(numbersArray[j], numbersArray[j - 1]);
        j = j - 1;
        System.out.println(Arrays.toString(numbersArray));
      }
    }
  }

  public static void main(String args[]) {
    insertionSort(numbersArray);
  }
}
package;
导入java.util.array;
公共类InsertionSort{
静态int[]numbersArray={5,2,4,6,1,3};
静态无效交换(整数a、整数b){
内部温度=a;
a=b;
b=温度;
}
静态void insertionSort(int[]numbersaray){
for(int i=1;i0)和&(numbersaray[j]
解决方案:

在修复了参数中包含int[]的swap方法之后,swap现在可以工作了!我还将numbersaray.length-1编辑为numbersaray.length

谢谢你们的帮助,伙计们

package AlgoExercises;

import java.util.Arrays;

public class InsertionSort {

  static int[] numbersArray = { 5, 2, 4, 6, 1, 3 };

  static void swap(int i, int j) {
    int temp = numbersArray[j];
    numbersArray[j] = numbersArray[i];
    numbersArray[i] = temp;
  }

  static void insertionSort(int[] numbersArray) {
    for (int i = 1; i < numbersArray.length; i++) {
      int j = i;
      while ((j > 0) && (numbersArray[j] < numbersArray[j - 1])) {
        swap(j, j - 1);
        j = j - 1;
        System.out.println(Arrays.toString(numbersArray));
      }
    }
  }

  public static void main(String args[]) {
    insertionSort(numbersArray);
  }
}
package;
导入java.util.array;
公共类InsertionSort{
静态int[]numbersArray={5,2,4,6,1,3};
静态无效交换(int i,int j){
int temp=数字阵列[j];
numbersaray[j]=numbersaray[i];
数字阵列[i]=温度;
}
静态void insertionSort(int[]numbersaray){
for(int i=1;i0)和&(numbersaray[j]
Java是一种传递值语言,因此交换传递给
swap
方法的
int
变量没有什么区别。您应该将数组本身+要交换的两个索引传递给方法,并在交换方法中修改数组

static void swap(int[] arr, int i, int j) {
    int temp = arr[j];
    arr[j] = arr[i];
    arr[i] = temp;
}
叫它

swap(numbersArray, j, j-1);

注意,我没有检查插入排序实现的逻辑。这个答案只涉及交换问题。

只是想让您以另一种方式思考为什么现有的
交换方法不起作用:如果您这样编写代码:

void swap(int a, int b) {
  int t = a;
  a = b;
  b = t;
}

void callSwap() {
  int x = 1;
  int y = 2;

  swap(x, y);

  System.out.println(x + ", " + y);
}
您可以“内联”
swap
方法,基本上将其复制到
callSwap
方法中。语义上等价的代码是:

void callSwap() {
  int x = 1;
  int y = 2;

  // Start of inlined swap method.
  {
    int a = x;
    int b = y;

    int t = a;
    a = b;
    b = t;
  }
  // End of inlined swap method.

  System.out.println(x + ", " + y);
}
希望您不会期望
x
y
交换值


请注意,这种行为与变量名
a
b
x
y
不同这一事实无关;我只是选择了不同的。如果将
swap
的参数称为
x
y
,则在内联时有必要将它们重命名为其他参数,因为它们与
callSwap
中的
x
y
完全分离。您必须在数组中设置swap。目前情况并非如此。您已将其写入代码中!!!可能的重复,不,不是通过值,而是通过引用的副本。这就是“通过值传递”的意思;看见