冒泡排序--预备知识[【两个数字交换】

本文详细介绍了三种不同的数值交换算法:算术运算、异或运算和借助第三个变量的方法。每种算法都附带了具体的步骤解释及实例演示,有助于读者理解不同场景下选择合适的数值交换策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1) 算术运算

// a=10;b=12;

// a=b-a; //a=2;b=12

// b=b-a; //a=2;b=10

// a=b+a; //a=10;b=10

// 它的原理是:把a、b看做数轴上的点,围绕两点间的距离来进行计算。

// 具体过程:

// 第一句“a=b-a”求出ab两点的距离,并且将其保存在a中;

// 第二句“b=b-a”求出a到原点的距离(b到原点的距离与ab两点距离之差),并且将其保存在b中;

// 第三句“a=b+a”求出b到原点的距离(a到原点距离与ab两点距离之和),并且将其保存在a中。

// 完成交换。

 

 

 

// 2) 异或运算

// 此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。

// 这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。

// 原理:一个数同另一数连续异或2次,可还原为自已

//      该算法利用二进制数(数在计算机就是以二进制的存储的<是补码>)按每一位求异或(两个相同时

            为 0;一个是1,一个是0为1)的一个性质——对任意给定的一个二进制数来说,它与任意一个二进            制数,连续异或两次最终得到的还是它本身即有(a = a ^ b ^b)。

//       证明:因为异或运算是可结合的(满足结合律),且可交换的,所以任何情况一个数和另一个数连                续异或都可成 “a ^b ^ b”的形式

// 再由结合性 a^b^b = a^(b^b) = a^0 = a  #

// 按照这个思想,再结合给出的注释,交换算法就很简单了。

 

         int num1 =3;

         int num2 =8;

         num1 = num1 ^ num2 ; // -1-

         num2 = num1 ^ num2 ; // -2-

         num1 = num1 ^ num2 ; // -3-

 

         System.out.println(num1 +","+num2);

 

 

 

/3)借助第三变量,

// 例子给你三只容量相同的杯子,一杯雪碧,一杯白酒,还有一只空杯子;现在想实现白酒和雪碧互换。算法原理很简单,不多说。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值