private 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];
}
利用上面程序对数组arr中arr[i]和arr[j]进行交换时出错
原因:没有考虑到数组下标i = j的情况,如果i = j的话,第一步运算结果使得arr[i]和arr[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[i] ^ arr[j];
}
方法二:
public static void swap(int[] arr, int i, int j) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}