关闭

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

标签: 交换赋值数据交换亦或
446人阅读 评论(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

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

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





1


点击打开链接







2
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

iOS 8种加锁 效率比较

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

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

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

<C/C++算法> 八大经典排序算法的性能对比与总结

一,各排序算法的思想及其稳定性 (1)冒泡排序 冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,我想...
  • EbowTang
  • EbowTang
  • 2014-06-10 20:05
  • 6006

iOS开发中大部分App的网络数据交换是基于HTTP协议的。本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法。

iOS开发中大部分App的网络数据交换是基于HTTP协议的。本文将简单介绍在Swift中使用HTTP进行网络请求的几种方法。 注意:网络请求完成后会获得一个NSData类型的返回数据,如果数据格...
  • qq_31292239
  • qq_31292239
  • 2016-07-21 10:20
  • 183

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

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

Activity 数据交换的几种形式介绍

有时候我们想要用Intent传递一个对象,或者List,那该怎么传递呢?这里就具体说下具体如何做:     使用Intent传递List或对象都必须让该对象实现Serializable 接口,通过序列...
  • SHR957250701
  • SHR957250701
  • 2015-02-07 17:24
  • 952

Iris数据集分类,查看几种分类方法的效率

  • 2009-01-04 11:34
  • 44KB
  • 下载

在VFP中将通用字段值与WORD文档进行数据交换的实现方法

  • 2012-03-19 10:28
  • 101KB
  • 下载

排序算法之直接选择排序(内附交换两个数据交换的正确实现方法)

直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的...
  • bbewx
  • bbewx
  • 2014-04-16 22:56
  • 413

当前比较流行的几种数据交换格式

当前比较流行的几种数据交换格式 主要包括以下三种: · XML · JSON · YAML   XML     XML是当前编程中最为流行的数据交换格...
  • cjjwwss
  • cjjwwss
  • 2013-10-11 14:09
  • 1801
    个人资料
    • 访问:190685次
    • 积分:4766
    • 等级:
    • 排名:第7014名
    • 原创:207篇
    • 转载:47篇
    • 译文:0篇
    • 评论:90条
    GitHub
    博客专栏
    文章分类