【C学习】swap函数的多种实现对比
来源:互联网 发布:windows开线程 编辑:程序博客网 时间:2024/05/13 04:50
#include <stdio.h>#include <stdlib.h>void Swap0( int a, int b);//交换函数void Swap1( int *a, int *b);void Swap2( int *a, int *b);void Swap3( int *a, int *b);void Swap4( int *a, int *b);void Swap5( int *a, int *b);int main(){ int a = 2,b = 3; printf("交换之前:a:%d,b:%d\n",a,b); Swap0(a,b); printf("Swap0:a:%d,b:%d\n",a,b); a = 2,b = 3; printf("\n交换之前:a:%d,b:%d\n",a,b); Swap1(&a,&b); printf("Swap1:a:%d,b:%d\n",a,b); a = 2,b = 3; printf("\n交换之前:a:%d,b:%d\n",a,b); Swap2(&a,&b); printf("Swap2:a:%d,b:%d\n",a,b); a = 2,b = 3; printf("\n交换之前:a:%d,b:%d\n",a,b); Swap3(&a,&b); printf("Swap3:a:%d,b:%d\n",a,b); a = 2,b = 3; printf("\n交换之前:a:%d,b:%d\n",a,b); Swap4(&a,&b); printf("Swap4:a:%d,b:%d\n",a,b); printf("\n交换之前:a:%d,b:%d\n",a,b); Swap5(&a,&b); printf("Swap5:a:%d,b:%d\n",a,b); return 0;}/*不能交换,形参传值,实际传过去是拷贝的一份,没改变主函数中x,y是值传递:是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。*/void Swap0( int a, int b){int temp;temp = a;a = b;b = temp; printf("Swap0内,交换后:a:%d,b:%d\n",a,b);}/*不能交换因为形参是指针,所以函数调用要传递变量的地址函数swap1(&a,&b),形参传递的是的a、b的地址,函数交换了地址。但是地址里存储什么内容没有变。对于main中的a,b值,a是所声明的地址命名,所以a的实际内容也没有变*/void Swap1( int *a, int *b){int *temp;temp = a; a = b; b = temp; printf("Swap1内,交换后:a:%d,b:%d\n",*a,*b);}/*能交换地址指向的内容进行了交换*/void Swap2( int *a, int *b){int temp;temp = *a; *a = *b; *b = temp; printf("Swap2内,交换后:a:%d,b:%d\n",*a,*b);}/*能交换用^是位异或运算,同为0或者同为1时,对应位结果为0;否则为1不使用多余空间最优算法。适合各种情况*/void Swap3( int *a, int *b){ if( *a != *b ) { *a ^= *b; *b ^= *a; *a ^= *b; } printf("Swap3内,交换后:a:%d,b:%d\n",*a,*b);}/*能交换用+-运算不使用多余空间缺点:a、b同号时会溢出。改进:swap5、swap3*/void Swap4( int *a, int *b){ if( *a != *b ) { *a += *b;//a=1,b=2;a+=b为a=3,b=2 *b = *a - *b;//b = a-b=1,a=3 *a -= *b;//a = a-b; } printf("Swap4内,交换后:a:%d,b:%d\n",*a,*b);}/*能交换用+-运算不使用多余空间缺点:a、b异号时会溢出。改进:swap4、swap3*/void Swap5( int *a, int *b){ if( *a != *b ) { *a -= *b;//a=1,b=2;a-=b为a=-1,b=2 *b += *a;//b += a 为b=1,a=-1 *a = *b - *a;//a = b-a; } printf("Swap5内,交换后:a:%d,b:%d\n",*a,*b);}
0 0
- 【C学习】swap函数的多种实现对比
- swap VS gcd的多种实现方式
- Swap函数的实现
- swap()函数效率对比
- c/c++和java实现swap函数的不同处
- C++PassingBy Reference之Swap函数的实现
- c/c++和java实现swap函数的不同处
- c/c++和java实现swap函数的不同处
- swap函数的实现方式
- C语言实现泛型swap函数
- linux学习之c语言swap函数
- java中swap函数的实现分析
- swap()函数的几种实现
- swap交换函数的三种实现
- 实现swap函数的简单应用
- C语言swap函数
- C语言swap函数
- 《Effective C++》学习笔记条款25 考虑写出一个不抛异常的swap函数
- Java中守护线程的总结
- Makefile模板升级版
- VS2105 和opencv3.1.0 安装过程中出现的问题
- 从头学习Linux
- 如何在 Linux 上录制你的终端操作
- 【C学习】swap函数的多种实现对比
- 达牛:这才是从菜鸟程序猿到技术大牛正确的打开方式
- 在 Linux 上管理加密密钥的最佳体验
- 请使用命令行展开功能来完成以下练习
- 最常用的组件ListView
- java虚拟机学习笔记(0)
- 线程终止方法
- ubuntu 14.04安装Samba 做共享文件夹
- 把你的旧笔记本变成 Chromebook