AB交换问题
来源:互联网 发布:淘宝首页是静态页面吗 编辑:程序博客网 时间:2024/05/18 18:43
问题描述,给两个变量A和B,设计算法交换他们.一个合理的约定: A和B在内存内是连续的并且长度相同.对于不连续的,可以调用这个算法,因此这里只讨论连续的.
把问题简化,我们下面讨论int类型的.
answer1:
t = A; A = B; B = t;
评价:最朴素的想法,附加空间为O(1)
answer2:
A+=B; B = A-B; A-=B;
评价:没有附加空间, 但是可能溢出,要想不溢出也行,要加if语句判断情况
answer3:
A*=B; B=A/B; A/=B;
评价:2的一个变种,缺点更容易发生,写在这里只是想提示一下,方法2只是一个模式
answer4:
A^=B; B^=A; A^=B;
评价:比1少一个变量,速度相同,没有溢出,看起来是个不错的算法.
answer5:
对于支持swap指令的CPU,直接调用这个指令就OK了.
第一种方法不讨论,后面的2-4方法实际上想法是相同的:先让一个变量附带上两个变量都有的并且可还原的属性,然后在还原两个变量的同时随手把变量交换掉.2和3的缺点就是还原度不好,因为可能有溢出,因此不是好算法.
对于非int型的数据呢?比如double或者float[], 其实无所谓的,交换和数据类型是无关的,对于交换操作来看,要的只是字节数而已.当然,对于32位机来说,先4个字节4个字节的交换,然后再交换不足4个字节的部分,这样快些
最后,实际操作中你用哪个呢?我选择1或者4,如果不是大的结构体,就用1,速度照样很快,清晰明了.如果结构体比较大,那么用4,只是为了效率.
对于方法5,除非给定我操作平台,否则懒得写汇编代码.和方法5雷同的是高精度加减法问题,对于高精度加减法,实际上CPU内部的adc指令非常有效,使用这个指令的话运行效率不知道要比写c代码快多少倍.
- AB交换问题
- 初始化顺序、==、AB交换
- 小问题AB BA
- 3背包问题分ab
- 面试题:不用第三变量交换ab值
- C语言面试题 unsigned int ,i?i, ab 交换
- 32. 交换ab中的值,使得差最小
- 嵌入式 ab不需要第三方进行交换值
- ♦️交换ab的两种方法
- 面试:实现AB两个数的值交换
- ab.
- ab
- ab
- ab
- ab
- ab
- ab
- ab
- STL容器使用DEMO-bitset
- REFCNT
- [转]四行代码算大数阶乘(绝对强悍,毫秒级别的)
- STL容器使用DEMO-priority_queue
- 呵呵
- AB交换问题
- 对象锁
- CONFIG_SYS_CLK_FREQ
- COME ON~
- SQL代码自动生成器
- 学习 ARM 系列 -- FS2410 开发板上启用 MMU 实现虚拟内存管理
- 我的数据结果课程设计题目
- c primer plus 5 ch6 循环
- uboot-顶层Makefile注释