首先来看交换算法
func swap(arr1 []int,x, y int) { arr1[x] = arr1[x] ^ arr1[y] arr1[y] = arr1[x] ^ arr1[y] arr1[x] = arr1[x] ^ arr1[y] }
当我使用这个算法时,一定会有一个前提,就是x != y
那么为什么x!=y呢?
可以从代码中看出,我们使用的是异或操作(相同为0,不同为1),两个相同的数异或,结果为0,所以当x = y 时,会使当前位的元素值变为0。所以用不的。
如果相同的数结果为零,那么前提条件是arr1[x] != arr1[y] 才对啊?
刚开始确实会将元素所在为值变为0,但是之后的异或操作又会使它便会原样,因为任何数与0异或都是它本身。