Java:插入排序算法交换

标签 java algorithm insertion-sort

亲爱的 Stackoverflowers 伙伴们,

我的交换方法在插入排序方法中不起作用;它没有交换我的数组元素。

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

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);
  }
}

解决方案:

修复了参数中包含 int[] 的 swap 方法后,swap 现在可以工作了!我还将numbersArray.length-1 编辑为numbersArray.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);
  }
}

最佳答案

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);

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

关于Java:插入排序算法交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34789729/

相关文章:

java - 如何打印模式不匹配的列号和行号

java - 如何让程序在 for 循环内等待用户输入?

java - 嵌套 for 循环打印数组列表中的一组值

python - 如何为未加权图做最短路径算法?

java - Java 中类似斐波那契数列的非递归解决方案是什么?

algorithm - 为什么对于小的情况,插入排序比快速排序和冒泡排序快?

java GUI尝试从多个文本字段获取多个输入

algorithm - 对 N 行的最小更改以使给定行成为所有行的子段

c# - 为什么在此实现中插入排序总是击败合并排序?

algorithm - 对于已排序的数据,哪种排序方法最快?