交换数组元素-不使用临时变量

正常我们交换元素都会引入一个临时变量。

这里在某个博客的评论里看到一个巧妙的方法,就不需要临时变量了。(使用加减运算的方法也是可以的,但是有不足之处,就是当数组中的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];
}

猜你喜欢

转载自blog.csdn.net/u013984781/article/details/100581250