logologo

如何不使用额外变量交换两个数?

Jul 18, 2023

使用额外变量

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

不使用额外变量

int a = "甲",b ="乙";

a = a ^ b; // a = 甲^乙; b = 乙
b = a ^ b; // a = 甲^乙; b = 甲^乙^乙=甲
a = a ^ b; // a = 甲^乙^甲=乙; b = 甲

根据异或运算 甲^乙^乙=甲 甲^乙^甲=乙 即可完成交换!

实战

注意:i 和 j 是一个位置(内存地址)的话,会出错!

public static void swap(int[] arr, int i, int j) {
    arr[i] = arr[i] ^ arr[j];
    arr[j] = arr[i] ^ arr[j];
    arr[i] = arr[i] ^ arr[j];
}
浙ICP备2021022773号    2022-PRESENT © ZhengKe