有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何“交换”数组中的两个值?

我想写一个选择排序算法。作为算法的一部分,我需要在数组中切换2个值,我尝试如下:array[min] = array[i]; array[i] = array[min];但我相信这不会起作用,因为array[min]已经是=array[i]。那我该怎么交换呢?下面是我的密码

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

static int n = 5;
static int temp;

        for (int i = 0; i<=5; i++) {
        int min = 0;

        for (int j = i+1; j<=n; j++) {
            //System.out.println(j);

            if (array[j]<array[min]) {
                min = j;
            }

            if (min != i) {
                array[min] = array[i];
                array[i] = array[min];
            }
        }
    }

共 (2) 个答案

  1. # 1 楼答案

    交换的方式有很多:

    • 带有第三个临时变量

      temp = array[min];
      array[min] = array[i];
      array[i] = temp;
      
    • 不带临时变量(使用加法)

      array[min] = array[min] + array[i];
      array[i] = array[min] - array[i];
      array[min] = array[min] - array[i];
      
    • 不带临时变量(使用位操作)

      array[min] ^= array[i];
      array[i] ^= array[min];
      array[min] = array[i];
      
      这里^是按位的XOR operator
  2. # 2 楼答案

    也可以在不使用temp变量的情况下交换值。示例代码如下所示:

    例如:

    array[min] = 10;
    array[i] = 5;
    

    现在

    array[min] = array[min] + array[i]; // array[min] = 15
    array[i] = array[min] - array[i]; // array[i] = 10
    array[min] = array[min] - array[i]; // array[min] = 5
    

    这里可以避免使用temp变量