交换两个数字的方法

2018-09-10  本文已影响0人  李2牛

今天在写快排的时候遇到一个问题,排序的结果中某些数字莫名被清零。
断点调试之后发现原来是交换函数的问题。
大体上说,交换两个数字的方法有三种。这里以交换数组中的两个数字为例子做说明。

  1. 中间参数。
void swap(int[] array,int a,int b){
        int tmp = array[a];
        array[a] = array[b];
        array[b] = tmp;
    }
  1. 加减法。注意这里的一个问题:如果 ij 相等的话 array[i]array[j] 两个数字是一样的 ,对应下标的数组元素会在 ② 处被清零。
void exchange(int[] array, int i, int j) {
        array[i] = array[i] + array[j];
        array[j] = array[i] - array[j]; //②
        array[i] = array[i] - array[j];
    }
  1. 位运算。这里需要注意的是如果 ij相等的话,数字会在 ① 处被清零。
 void exchange(int[] array, int i, int j) {
        array[i] = array[i] ^ array[j]; //①
        array[j] = array[i] ^ array[j];
        array[i] = array[i] ^ array[j];
    }

所以,还是不要写太炫酷的代码,如果不清楚里面的tricks的话。老实本分的第一种方法永远不犯错。

上一篇 下一篇

猜你喜欢

热点阅读