不管在学习哪门语言,都会遇到交换两个变量的这种问题,而且在面试测试题中也经常提到。既然出现的频率这么高,那我们今天就来讲讲交换两个变量常用的几种方法。
今天主要是基于C语言写的代码,不管哪种语言写的,应该核心思想是一样的,只是代码的语法有差别仅此而已,我们不要为了写代码而写代码。
下面正式开始我们的主题:交换两个变量的值。
一、使用中间变量的情况下,交换两个变量。
这种方法的主要核心思想就是交换两个变量时,用一个中间变量作为桥梁。比如:有两杯不同颜色的水,我们要交换两个杯里面的水,是不是需要用到一个空杯来做转接的作用,不可能不借用其他工具,直接交换两杯水。所以我们围绕这个思想去写代码就很容易了。
下面代码展示:
objectivec
int a = 10;
int b = 20;
int c = 0; //中间变量,用于转接的作用
printf("交换前:a = %d, b = %d\n",a,b);
c = a; //将a变量的值给变量c
a = b; //将b变量的值给变量a
b = c; //将c变量的值给变量b
printf("交换后:a = %d, b = %d\n", a, b);
这种方法是交换两个变量最常用也是最简单的方法。如果我们自己写逻辑代码需要交换两个变量就可以使用这种方法。
但是,,,,天理不饶人,面试中往往不给你出这么简单的题,他们题的要求就是不需要中间变量来做转接,直接交换两个变量的值,这样也挺好的,又节省了一个变量大小的空间,主打一个节省之王(哈哈哈哈哈)。为了铁子们在找工作的过程中,如果遇到这种题之后知道该如何面对,能快速写完代码。
二、不使用中间变量的情况下,交换两个变量。
来到了在找工作过程中,最容易出现的笔试题。这种题唯一的好处就是节省内存空间,看着牛逼一点点。如果是为了易于阅读的话,还是上面哪种方法更好。
不使用中间变量交换两个变量,在C语言中有三种方法可以实现,下面就来一一讲解,铁子们理解一种就欧克咯。
1、方法一
这种方法的核心思想就是对两个变量的二进制进行操作,对二进制进行一系列的运算之后,就能达到交换两个变量的值。
objectivec
int a = 10;
int b = 20;
printf("交换前:a = %d, b = %d\n",a,b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后:a = %d, b = %d\n", a, b);
为什么将两个变量异或来异或去,就可以交换两个变量的值呢,这主要是用到了异或这个操作符的特性,下面就画图给铁子们讲解一下。
2、方法二
这种方法的核心思想就是用两个变量的值进行加减的方法达到交换两个值的目的。
objectivec
int a = 10;
int b = 20;
printf("交换前:a = %d, b = %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后:a = %d, b = %d\n", a, b);
方法二还是比较简单的,这个不用画图大家也能懂。以后你们都是代码界的一把手。
总结:
我写这篇博客的意义是怕我的铁子们以后在找工作的过程中遇到这类题目了不知从何下手,因为我也经历过,当时第一反应就是使用中间变量交换两个变量,不知道还有其他不用中间变量就可以交换的方法。所以不想让我的铁子们去踩我踩过的坑。大家主要了解实现的思想,只要思想到位,代码不就唰唰唰的来了。
谢谢铁子们~