前言
这两天刚学会使用MarkDown书写,因为很喜欢这种简单的布局和格式,刚用时发现改变颜色还需要写代码,有点不明白为什么要这么麻烦。后来看见一句话,“MarkDown本身简单设计就是为了让人可以一直处于写作状态,而不用因为忙于调整格式,打断了写作思路。” 记录一下,希望自己以后每周都能坚持写一两篇博客,记录自己的学习。
如何实现swap操作最高效
swap操作指的是交换数组中两个元素的操作,这个操作在排序算法中必须用到,而且使用频率很高,但是简单的进行元素交换其实是比较慢的,那么如何高效一点的进行交换操作呢?
最简单常用的三变量法 在刚接触程序语言设计时,我们就学了冒泡排序,同时也学会了使用最简单的交换,代码如下:
int temp,
a, b
temp =
a
a = b
b =
a
优化版本 上一个简单方法需要借助一个中间变量来实现交换,优化版本可以不需要中间变量也能实现交换操作:
int
a, b
a =
a + b
b =
a - b
a =
a - b
这个方法看起来很好用,但实际上很少使用,因为它的适用范围很窄,只有定义了加减法的数据类型才能采用此方法,事实上第一种简单交换方法已经足够好了。
进一步优化版本 要实现两个数字的交换,其实还可以借助异或操作来实现,我们知道程序处理移位与位操作总是很快的:
int temp,
a, b
temp =
a^b
a = temp^
a
b = temp^b
这里利用了数异或的性质,一个数与其本身异或等于0,0与一个数异或不改变该数。