今天用用异或进行数组数值交换时出现了问题,部分值为0。
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[j] ^ arr[i];
}
原因:当i==j时,数组本身异或本身得到的值为0,赋值后经过后两次异或,是的arr[i]=arr[j]=0
可以改为
public static void swap(int[] arr,int i,int j){
if(i==j) return;
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[j] ^ arr[i];
}