【知识积累】如何不用额外变量交换两个数

该博客介绍了如何在Java中利用异或运算无须额外变量实现两个数的交换,通过异或的性质,确保了交换过程的正确性。文章通过示例代码展示了具体操作,并在main方法中进行测试,交换了数组的最后一个元素和第一个元素。
摘要由CSDN通过智能技术生成
package com.example.demo.algorithm;

/**
 * @Description :
 * 如何不用额外变量交换两个数
 *
 *普通公式:
 * 异或运算:相同为0,不同为1
 * 同或运算:相同为1,不同为0
 * 超级公式:
 * 异或运算 = 无进位相加
 *
 * 异或运算的性质:
 * 1)、0^N=N N^N=0
 * 2)、异或运算满足交换律和结合律
 *
 * @Author : Darren
 * @Date : 2021 年 02 月 07 日 20:06:18
 * @since : 1.0
 */
public class J008_SwapVariable {

    public static void main(String[] args) {
        int maxSize = 100;
        int maxValue = 100;
        int[] arrays = J001_SelectSort.generateRandomArray(maxSize, maxValue);
        System.out.println("before: ");
        J001_SelectSort.printArray(arrays);
        swap(arrays, 0, arrays.length-1);
        System.out.println("end: ");
        J001_SelectSort.printArray(arrays);
    }

    /**
     * 两个变量交换不申请额外遍历
     * 注意:
     * 变量1和变量2必须不相等或者值相等内存地址不能相等,否则两个相同的变量异或会变成0
     *
     * @param arrays
     * @param var1 变量1
     * @param var2 变量2
     */
    public static void swap(int[] arrays, int var1, int var2){
        if (arrays == null || arrays.length < 2){
            return;
        }
        //var1 = 3 var2=4
        //第一行执行 var1 = 3^4 var2=4
        arrays[var1] = arrays[var1] ^ arrays[var2];
        //第二行执行 var1 = 3^4 var2=4^3^4=3
        arrays[var2] = arrays[var1] ^ arrays[var2];
        //第三行执行 var1 = 4 var2=3
        arrays[var1] = arrays[var1] ^ arrays[var2];
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值