数组中元素交换位置(辅助空间方法和位运算方法)
在算法中,经常会遇到在数组中调换两个元素位置的问题或者交换两个基本数据类型的变量的值的问题
辅助空间方法
交换两个基本数据类型的变量
int a=1,b=2;
int tmp=a;
a=b;
b=temp;
//此时a=2,b=1
数组中元素调换位置
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
位运算方法
位异或运算(^)
运算规则
两个数转为二进制,然后从高位开始比较,如果相同则为0,不相同则为1。
比如:8^11.
8转为二进制是1000,11转为二进制是1011.从高位开始比较得到的是:0011.然后二进制转为十进制,就是Integer.parseInt(“0011”,2)=3;
交换两个基本数据类型的变量
int f = 50; //二进制 110010
int g = 60; //二进制 111100
f = f^g; //110010,111100——>001110
g = f^g; //001110,111100——>110010 ——>50
f = f^g; //001110,110010——>111100 ——>60
System.out.println(f+" "+g);//输出结果是:60 50
数组中元素调换位置
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];
}
两种方法对比
利用位异或运算(^)节省辅助空间,降低空间复杂度