數組中元素交換位置(輔助空間方法和位運算方法)
在算法中,經常會遇到在數組中調換兩個元素位置的問題或者交換兩個基本數據類型的變量的值的問題
輔助空間方法
交換兩個基本數據類型的變量
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];
}
兩種方法對比
利用位異或運算(^)節省輔助空間,降低空間複雜度