之前在冒泡排序、插入排序中,经常会对 i 和 j 位置的数进行交换,此时会申请一个int tmp类型变量来帮助交换。那如何不用tmp变量就能够使 i 和 j 位置上的数发生交换。
代码如下:
public void swap(int a, int b) {
// 不管a和b具体数值是什么。先假设:a: 甲 b:乙
//第一次时,将值带入 得到 a = 甲 ^ 乙
a = a ^ b;
//第二次时, 将a带入 b = 甲 ^乙 ^ 乙
//此时没有改变对a的赋值
//因为相同数字异或后为0, 所以此时b = 甲
b = a ^ b;
//再次带入 甲 ^ 乙 ^ 甲
//此时a = 乙,完成交换
a = a ^ b;
}
如果在排序中使用这种方式的交换,需要注意的是,i 和 j 的下标不能相同,否则异或后为0。