美文网首页
交换两个数字的方法

交换两个数字的方法

作者: 李2牛 | 来源:发表于2018-09-10 19:00 被阅读0次

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

  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的话。老实本分的第一种方法永远不犯错。

相关文章

  • jsday01

    js 交换两个值的方法 方法一 方法二(适用于数字交换) 方法三(位运算) 什么时候值是undefined (变量...

  • C#语言规范(小例子)

    一、交换两个数字的值 1、普通交换 2、用方法执行交换 方法传值必须加ref 不加只是交换原来值的副本,值本身...

  • 交换两个数字的方法

    今天在写快排的时候遇到一个问题,排序的结果中某些数字莫名被清零。断点调试之后发现原来是交换函数的问题。大体上说,交...

  • 关于排序算法中交换两个数

    昨天写排序算法的时候遇到一个问题:将交换两个数的几句代码定义成一个静态方法,需要交换数字的时候调用这个方法,结果排...

  • JS中变量交换

    本篇主要说的是JS变量交换之中的数字交换 数字交换可能是这里面方法最为丰富的一种了,因为可以用数学计算的方法来做,...

  • 两个数字交换

    交换两个数Ⅰ、一般引入第三个变量: Ⅱ、位操作 位操作优势在于更接近计算机运算方式,程序性能得到了提升,减少空间的...

  • 交换两个数字

    include define SWAP1(a,b) \ { ...

  • Runtime

    runtime运行时机制1:通过runtime,实现方法交换(交换两个类方法、交换两个实例方法)2:通过runti...

  • Day3

    1 runtime运行时机制1:通过runtime,实现方法交换(交换两个类方法、交换两个实例方法)。2:通过ru...

  • Runtime实例运用-交换方法实现、Method Swizzl

    一.交换两个方法的实现: Runtime还可以交换两个方法的实现。例如:Person有两个方法:study、run...

网友评论

      本文标题:交换两个数字的方法

      本文链接:https://www.haomeiwen.com/subject/zfhegftx.html