swap函数
来源:互联网 发布:电子商务网站域名 编辑:程序博客网 时间:2024/05/22 12:36
在编写程序是,经常会用到swap函数,今天看了《深入理解计算机系统》看到一个问题:
swap函数的实现方式
1
void swap(int *x, int *y){*y = *x ^ *y;*x = *x ^ *y; // *x = *x ^ (*x ^ *y) = *x ^ *x ^ *y = 0 ^ *y = *y;*y = *x ^ *y; // *y = *x ^ *y = *x ^ (*x ^ *y) ^ (*x ^ *y) = *y ^(*x ^ *y) = *x ^ 0 = *x }
2
void swap(int*x , int *y){ int *temp; temp = *y; *y = *x; *x = temp;}
第一种方式:基于异或0^0 = 0; 0^1 = 1;1^1 = 0;
第二中方式:
第二中方式是指针的方式,很容易理解。但是第一种方式由于第二种方式。
关于第一种方式,如果我们在排序时用到它,遇到两个数相同时,就会出现 *x = *y = 0;因为相同的值异或为1,不同的值异或为0;这样就不能保证经过swap函数处理后结果的正确性。解决方式,可在swap函数中加一个条件如果*x = *y,就不做处理
void swap(int *x, int *y){ if (*x = *y) return ; else { *y = *x ^ *y; *x = *x ^ *y; *y = *x ^ *y; }}
C++里有实现了专门的swap函数,对C++不熟悉,不知道是怎么实现的
0 0
- swap函数
- swap函数
- swap函数
- swap函数
- swap函数
- Swap函数
- swap函数
- swap函数
- swap函数
- swap函数
- swap函数
- swap函数
- 关于swap函数
- 内置swap函数
- 你会写几种swap函数?
- 关于swap函数
- swap()函数效率对比
- Java Swap函数
- 批处理 bat中的for命令的作用
- 重温那些模糊的知识点 ----Session,Cookie
- 使用rman迁移oracle数据库
- 阿里要走102年,阿里的工程师能走多远呢?
- 联想Y470 非虚拟机安装苹果Mac OS X Mavericks 10.9.1教程详解(文字+图片),通俗易懂亲自动手——序列三之安装过程,设置选项
- swap函数
- Andriod 将图片截取为圆角图片
- Java中null和""的疑问
- c/c++中#include <>与#include""区别
- 【Java编程】Eclipse快捷键
- 黑马程序员——Java学习笔记之12——已接触的“设计模式”总结
- 文件的显示与下载
- 项目计划书
- Camera硬件结构组成