不耻下问:Java语言为什么交换两个整数需要用第三个数,而交换两个数组就不需要了呢

不耻下问:Java语言为什么交换两个整数需要用第三个数,而交换两个数组就不需要了呢

通过连续异或可以实现不引入第三个数交换吧

1、采用3个空间进行2个数交互原理

图片说明

//

变量都是有地址的如下表:
byte a1=25
byte a2=30
如要交互两个数,必须要开辟新的内存空间或采用寄存器。以内存地址空间为例,
现申请新的内存空间 byte temp;
现在进行数据交换。
步骤1: temp<-a1 此时数值 a1=temp=25;
步骤2:a1<-a2 此时a1=a2=30;
步骤3:a2<-temp 此时a2=temp=25
结果 a1=30 ,a2=25;

2、采用2个空间交互两个数原理

图片说明

//正文

Int a=25

Int b=30

由于int占用4个字节
此种问题可通过更为底层的操作如汇编语言,我汇编忘的差不多了,下面只是为了表现数据的移动方法。

Mov ax 25;
Mov bx 30;
Mov ah bl;
Mov al ah;
Mov bl ah;
Mov ah 0;  //对高端字节归零
                 //当然这个对数值的取值范围会有要求的。

3、其他特殊性交换方式也是有的

总的来说交换数据其实是对空间的分配和控制。和几个变量没有直接关系。但表象是要通过变量来进行控制的。

4数组交互的原来与数值交换的原来相同。都是对空间的分配和移动控制。

个别算法用不着第三个值,但是基本上都要第三个值做中转
一个值就是一个地址,不用第三个值的话,转不过来的