正常我们交换元素都会引入一个临时变量。
这里在某个博客的评论里看到一个巧妙的方法,就不需要临时变量了。(使用加减运算的方法也是可以的,但是有不足之处,就是当数组中的arr[a]+arr[b]的值大于int的最大值时,计算结果会溢出。导致arr[a]和arr[b]的值错误
/**
* 交换数组元素
* @param arr
* @param a
* @param b
*/
public static void swap(int []arr,int a,int b){
arr[a] = arr[a]+arr[b];
arr[b] = arr[a]-arr[b];
arr[a] = arr[a]-arr[b];
}
)
正确的方法,应该是使用异或。
/**
* 交换数组元素
* @param arr
* @param a
* @param b
*/
public void swap(int[] arr, int a, int b) {
arr[a] ^= arr[b];
arr[b] ^= arr[a];
arr[a] ^= arr[b];
}