今天下午长沙IOS基础班学习了位运算!我们帅气的斌哥,告诉我们一个非常装逼的交换两个变量的方法,那就是位运算!于是我在快速排序中使用,结果出现了很多不在数组中的......0,0,0,0,0,0,0,........
通过调试,我发现,当要交换的两个索引 "i"和"j"相同时,就会产生0.
懂了吧 a^=a; ----> a变为了0
解决办法就是,在交换之前,判断一下i 和 j
- /**
- * 交换数组中两变量的值
- *
- * @param a 数组名
- * @param i 其中一个变量
- * @param j 另一个变量
- */
- void exchange(int a[], int i, int j) {
- if (i != j) {
- a[i] ^= a[j];
- a[j] ^= a[i];
- a[i] ^= a[j];
- }
- }
复制代码
|
|