Java交换两个数的四种方法和效率

本文介绍并比较了四种常用的数值交换方法:使用中间变量、通过加减操作、直接赋值及异或运算。每种方法均用Java代码实现,并通过大量重复实验评估其效率。

两个数交换的四种常用方法:
1.中间变量交换
2.加减减法交换
3.赋值交换
4.异或交换

以下是Java代码:

public static void main(String[] args){
    System.out.println();
    System.out.println();
    long start, end;
    int a = 10, b = 20;
    long count = 1000000000L;

    start = System.currentTimeMillis();
    for(long i = 0; i < count; i++){
        a = b + (b = a) * 0;
    }
    end = System.currentTimeMillis();
    a = b + (b = a) * 0;
    System.out.println("*******************************");
    System.out.println("a=" + a +" " + "b=" + b);
    System.out.println("1.赋值交换耗时:" + (end-start) + "ms");
    System.out.println("*******************************");
    a = 10; b = 20;  //恢复原a、b值

    start = System.currentTimeMillis();
    for(long i = 0; i < count; i++){
        a += b;
        b = a - b;
        a -= b;
    }
    end = System.currentTimeMillis();
    a += b;
    b = a -b;
    a -= b;
    System.out.println("a=" + a +" " + "b=" + b);
    System.out.println("2.加减减交换耗时:" + (end-start) + "ms");
    System.out.println("*******************************");
    a = 10; b = 20;  //恢复原a、b值

    start = System.currentTimeMillis();
    int t;
    for(long i = 0; i < count; i++){
        t = a;
        a = b;
        b = t;
    }
    end = System.currentTimeMillis();
    t = a;
    a = b;
    b = t;
    System.out.println("a=" + a +" " + "b=" + b);
    System.out.println("3.中间变量交换耗时:" + (end-start) + "ms");
    System.out.println("*******************************");
    a = 10; b = 20;  //恢复原a、b值

    start = System.currentTimeMillis();
    for(long i = 0; i < count; i++){
        a ^= b;
        b ^= a;
        a ^= b;
    }
    end = System.currentTimeMillis();
    a ^= b;
    b ^= a;
    a ^= b;
    System.out.println("a=" + a +" " + "b=" + b);
    System.out.println("4.异或交换耗时:" + (end-start) + "ms");
    System.out.println("*******************************");
}

结果输出:


a=20 b=10
1.赋值交换耗时:1124ms


a=20 b=10
2.加减减交换耗时:895ms


a=20 b=10
3.中间变量交换耗时:598ms


a=20 b=10
4.异或交换耗时:1475ms


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值