c语言swap(a,b)值交换的4种实现方法

这篇文章所要表述的内容的确很简单,写之前,我纠结了很久:写与不写。平常swap(a,b)值交换,我们基本都是使用第一种方法,对于数学较好的人,可能会想到第二种方法,想到时,一定感觉很好,。对于汇编或对位有理解的人,可能会想到第三种方法,这个方法很妙。但,真正促使我写这篇文章的,还是第四种方法,妙,真的很妙,先(b = a),我是真没想到,我想,这么好的东西,尽管简单,但值得发表,以此共享。

swap(a,b)值交换的四种方法:


代码如下:

void swap(int &a, int &b) 

    //方法一:  
    int tmp = 0; 
    tmp = b; 
    b = a; 
    a = tmp; 
    //方法二:  
    //a = a+b;  
    //b = a-b;  
    //a = a -b;  
    //方法三:  
    //a ^= b ^= a ^= b;  
    //方法四:  
    //a = a+b-(b=a);  
}

int main(void) 

    int a = 3; 
    int b = 4;

printf("before swap: a = %d, b = %d\n", a, b); 
    swap(a, b); 
    printf("after swap: a = %d, b = %d\n", a, b);

return 0; 
}

结果:

before swap: a = 3, b = 4

after swap: a = 4, b = 3

关于传参方式有三种:值传参、地址传参、引用传参(C++方法),上面使用的是第三种,引用传参,因为这种传参方式使得swap里面实现更为直观。当然,也可以使用第二种传参方式地址传参,不过,值传参是不行的哦。

(0)

相关推荐

  • c语言swap(a,b)值交换的4种实现方法

    这篇文章所要表述的内容的确很简单,写之前,我纠结了很久:写与不写.平常swap(a,b)值交换,我们基本都是使用第一种方法,对于数学较好的人,可能会想到第二种方法,想到时,一定感觉很好,.对于汇编或对位有理解的人,可能会想到第三种方法,这个方法很妙.但,真正促使我写这篇文章的,还是第四种方法,妙,真的很妙,先(b = a),我是真没想到,我想,这么好的东西,尽管简单,但值得发表,以此共享. swap(a,b)值交换的四种方法: 复制代码 代码如下: void swap(int &a, int &a

  • Map获取键值,Map的几种遍历方法总结(推荐)

    Map获取键值 Map以按键/数值对的形式存储数据,和数组非常相似,在数组中存在的索引,它们本身也是对象. Map的接口 Map---实现Map Map.Entry--Map的内部类,描述Map中的按键/数值对. SortedMap---扩展Map,使按键保持升序排列 关于怎么使用,一般是选择Map的子类,而不直接用Map类. 下面以HashMap为例 public static void main(String args[]) { HashMap hashmap =new HashMap();

  • c语言实现两个值互相交换的函数

    c语言中实现两个值互换的函数. 1. #include <stdio.h> void swap(int n1, int n2) { int tmp; tmp = n1; n1 = n2; n2 = tmp; } int main(void) { int a, b; puts("please input two integers."); printf("a = "); scanf("%d", &a); printf("

  • 使用位运算、值交换等方式反转java字符串的多种方法(四种方法)

    在本文中,我们将向您展示几种在Java中将String类型的字符串字母倒序的几种方法. StringBuilder(str).reverse() char[]循环与值交换 byte循环与值交换apache-commons-lang3 如果是为了进行开发,请选择StringBuilder(str).reverse()API.出于学习的目的,我们可以研究char[]和byte方法,其中涉及到值互换和移位运算技术,这些技术对于了解StringBuilder(str).reverse()API黑匣子背后

  • Go语言题解LeetCode888公平糖果交换示例详解

    目录 一 描述 二 分析 三 答案 一 描述 888. 公平的糖果交换 - 力扣(LeetCode) (leetcode-cn.com) 爱丽丝和鲍勃拥有不同总数量的糖果.给你两个数组 aliceSizes 和 bobSizes ,aliceSizes[i] 是爱丽丝拥有的第 i 盒糖果中的糖果数量,bobSizes[j] 是鲍勃拥有的第 j 盒糖果中的糖果数量. 两人想要互相交换一盒糖果,这样在交换之后,他们就可以拥有相同总数量的糖果.一个人拥有的糖果总数量是他们每盒糖果数量的总和. 返回一个

  • php小技巧 把数组的键和值交换形成了新的数组,查找值取得键

    复制代码 代码如下: $cityname = array_flip($city_DB[name]); //把数组的键和值交换形成了新的数组 $city_name = array_search($city_id,$cityname,true); //查找值取得键

  • 易语言求正玄值方法

    易语言求正玄值,希望大家都能学懂. 非无私奉献,拒绝看经验不回复,学懂了记得按照下面做: 在底部点击相关按钮,给我投票和点赞. 有心得或者疑问,点击相关按钮反馈. 具体操作请看图. 1.易语言新建一个windows窗口 点击进入代码编辑区 2.我们输入 求正弦 () 这个函数 3.展开这个函数 可以发现这个函数只有一个参数 4.这个参数我重点讲解 它的单位是弧度 我们一般用度数表示 角度转换城弧度 用角度乘以#pi / 180 我们输入30 × #pi ÷ 180 如图 5.我们结合 调试输出这

  • 对Python中实现两个数的值交换的集中方法详解

    如下所示: #定义两个数并赋值 x = 1 y = 2 #第1种方式:引入第三方变量 z = 0 z = x x = y y = z #第2种:不引入第三方变量 x = x+y y = x-y x = x-y #第3种:推荐 x,y = y,x print("x=%d,y=%d"%(x,y)) 以上这篇对Python中实现两个数的值交换的集中方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • C语言之函数返回值与参数传递案例教程

    C语言函数返回值与参数传递 一:参数传递 C语言的函数中必不可少的就是参数传递,可以采用传值和传指针两种方式. 1.传值的形式:只是将参数值的拷贝传给函数,并非参数本体如: int test(int x,int y) { x=2*y; return x; } int main(void) { int a=0,b=5; printf("%d,%d\n\r",test(a,b),a); return 0; } 运行结果为: 10,0 即传值方式只可以将实参传递给函数,不可以改变实参本身.

  • Python交换字典键值对的四种方法实例

    目录 前言 一.当值唯一时 1. 使用zip进行交换 2. 使用for循环遍历交换 3. 使用dict.items()交换 二.当值不唯一时 总结 前言 在学习过程中发现有时候交换字典的键和值,会使得我们最后的输出结果更加直观明了,整理出以下四种交换方式(data是原字典,new_data 是交换后的字典) 一.当值唯一时 1. 使用zip进行交换 data= {'A':1, 'B':2, 'C':3} new_data = dict(zip(data.values(), data.keys()

随机推荐