iOS中数据交换的几种方法

两个数据交换在编程中很常用,比如排序算法中就经常要用到,下面介绍常用的三种方法,并对它们的效率作出对比,以便在大量用到交换的程序中提高效率。

第一种方法,使用一个临时temp,代码如下:

    int a1 = 3;      int a2 = 5;

    int temp;

    temp  =  a1;

    a1  =  a2;

    a2  =  temp;

第二种方法,直接不用额外的存储空间,直接在两个数据上操作,但是这种方法有可能在两个数相加时产生越界的问题。代码如下:

    int b1 = 3;    int b2 = 5;

    //b1 = b1 + b2

    //b2 = b1 + b2 - b2 = b1

    //b1 = b1 + b2 - (b1 + b2 - b2) =b2

    b1  =  b1  + b2;

    b2  =  b1  - b2;

    b1  =  b1  - b2;

第三种方法是使用异或运算符 亦或运算

int c1 = 3;  int c2 = 5;

//    a=a^b;

//    b=b^a;

//    a=a^b;

    c1 ^= c2;

    c2 ^= c1;

    c1 ^= c2;

亦或计算口诀:相同取0,相异取1 

现实中用的都是十进制的数值

例如:二进制数1101.01转化成十进制

1101.01(2)=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.25(10)

那么我们来看一看两个十进制数值是怎么进行异或计算: 

5 ⊕ 3 = ? 

1.进行异或计算前会把数值都转换为二进制: 

5和3转为二进制分别为:0101 、0011 

0101 

xor 0011 

———— 

结果 0110 

2.再把结果 0110 转换为十进制的:6 

3.所以 5 ⊕ 3 = 6

通过我的程序运行对比,得到以下结果:

结果显示,第一种方法效率是最高的,虽然第一种方法占据一个额外的内存空间,但是交换的三行代码实现的都是赋值操作,相对后两种的加减和异或要快很多。所以,当交换量大时,推荐用第一种方法,速度快,而且最容易理解。其次是第三种方法比较快,最次的是第二种方法,不过第二种方法和第三种方法的效率相差不多。

你可能感兴趣的:(iOS中数据交换的几种方法)