iOS中实现数据交换的几种方法介绍以及其效率对比

标签: 交换 赋值 数据交换 亦或
543人阅读 评论(3) 收藏 举报
分类:

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

第一种方法,使用一个临时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;
    NSLog(@"转换前的值a=%d,b=%d",c1,c2);
//    a=a^b;
//    b=b^a;
//    a=a^b;
    c1 ^= c2;
    c2 ^= c1;
    c1 ^= c2;
    NSLog(@"转换后的a=%d,b=%d",c1,c2);

// 2017-11-13 14:36:19.610391+0800 arithmetic[7331:360857] 转换前的值c1=3,c2=5 
// 2017-11-13 14:36:19.610558+0800 arithmetic[7331:360857] 转换后的c1=5,c2=3

亦或计算口诀:相同取0,相异取1 
现实中用的都是十进制的数值,那么我们来看一看两个十进制数值是怎么进行异或计算: 
5 ⊕ 3 = ? 
1.进行异或计算前会把数值都转换为二进制: 
5和3转为二进制分别为:0101 、0011 
0101 
xor 0011 
———— 
结果 0110 
2.再把结果 0110 转换为十进制的:6 
3.所以 5 ⊕ 3 = 6

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

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















查看评论

C++中几种数据交换方法的效率对比

两个数据交换在编程中很常用,
  • chienchia
  • chienchia
  • 2014-05-26 21:09:36
  • 1446

几种步进电机加减速方法的对比研究及其应用

  • 2018年03月04日 15:17
  • 768KB
  • 下载

开源网络爬虫介绍及其比较

开源网络爬虫介绍及其比较 Nutch 开发语言:Java http://lucene.apache.org/nutch/ 简介: Apache的子项目之一,属于Lucen...
  • Weiguang_123
  • Weiguang_123
  • 2014-02-22 18:47:31
  • 1652

iOS 8种加锁 效率比较

iOS开发中常用的锁有如下几种 来比较一下遇到加锁的情况: 1. @synchronized 关键字加锁  2. NSLock 对象锁  3. NSCondition   4. NSConditio...
  • s3590024
  • s3590024
  • 2016-04-21 10:42:00
  • 2120

iOS 开发中几种多线程方案

写在前面: 文章时转载的,作者写的太好了,很受用,怕哪天链接打不开了,所以自己转一次。 感兴趣的go:http://www.jianshu.com/p/0b0d9b1f1f19?utm_cam...
  • keayou
  • keayou
  • 2015-08-19 11:41:05
  • 526

iOS多线程比较、总结

NSThread、NSOperation、GCD 总结: 无论使用哪种方法进行多线程开发,每个线程启动后并不一定立即执行相应的操作,具体什么时候由系统调度(CPU 空闲时就会执行) 更新 UI ...
  • smnisbear
  • smnisbear
  • 2016-03-20 15:20:29
  • 699

java数组复制的效率

AVA语言的下面几种数组复制方法中,哪个效率最高? 正确答案: B   你的答案: D (错误) for循环逐一复制 System.arraycopy Sy...
  • Stand1210
  • Stand1210
  • 2016-09-09 17:52:30
  • 1882

JS几种数组遍历方式和性能分析对比

JS数组遍历的几种方式 JS数组遍历,基本就是for,forin,foreach,forof,map等等一些方法,以下介绍几种本文分析用到的数组遍历方式以及进行性能分析对比 第一种:普通f...
  • p358278505
  • p358278505
  • 2017-04-05 17:28:52
  • 1022

IOS中四种json解析效率比较

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式。 有的json代码格式比较混乱,可以使用此“http://www.bejson.com/”网站来进行JSON格式...
  • u013263917
  • u013263917
  • 2014-03-03 22:43:35
  • 1651

iOS开发中常用的几种绘图方法

建一类MyView继承UIView->storyboard->UIViewController->View->继承新建的类 (绘图形 字符串 图片) - (void)drawRect:(CGRec...
  • Austen_Wood
  • Austen_Wood
  • 2016-03-14 09:53:17
  • 242
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 22万+
    积分: 5106
    排名: 6800
    博客专栏
    文章分类
    最新评论