600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【基础算法】编程初学者入门必须掌握的算法——两值交换

【基础算法】编程初学者入门必须掌握的算法——两值交换

时间:2020-06-07 01:44:25

相关推荐

【基础算法】编程初学者入门必须掌握的算法——两值交换

(注:本文一部分图片来源于网络,如有侵权请联系我,我将在第一时间移除相关插图)

本文目录

1、两值交换是要实现什么?2、为什么说每一个编程人都必须掌握两值交换?3、两值交换:初学者常走的误区4、正确解法与代码示范4.1 正确算法的伪码模型4.2 程序语言实现4.2.1 两值交换:Java实现4.2.2 两值交换:C语言实现4.3 情景设定5、心得

1、两值交换是要实现什么?

我们考虑这样的情况。有两个变量a和b,其初始状态a=9,b=3。现欲将a和b的值互换,使a=3,b=9。这就是这篇文章的主题——两值交换所要实现的目标。

2、为什么说每一个编程人都必须掌握两值交换?

两值交换是针对数据的一种很基础、很基础的操作。编程人不会两值交换,就好比下围棋不会星小飞定式、数学家不会勾股定理一样。在后面即将学习的数据的排序、检索、增加、删除等管理操作里,两值交换是被使用得最频繁(没有之一)的基础子操作。

因此,学习两值交换,不仅有助于初学者正确认识与理解编程语言的赋值过程,而且也具备非常重要、非常基础性的实际应用意义。

3、两值交换:初学者常走的误区

有些对计算机的运行方式了解尚浅的初学者同志们拿到这个问题,会心里暗想:这还不简单?就你等于我、我等于你不就好了?于是拿起键盘,两秒钟便敲出了如下代码:

a = b;b = a;

这看起来有点像马戏团表演杂技,表演者左右手分别拿了两个不同颜色的球,然后两手同时一抛,以迅雷不及掩耳之势,两个球就各自到了另一只手上。在上面这段代码中,仿佛a在接收了b的值之后,同时又保持了自己原来的值,然后b又很智能地接收了a的这个原来的值似的。

这在我们人类看来似乎是合情合理的——左手的东西抛给右手,右手的东西抛给左手,不就实现互换了?能有什么问题?

然而,我们把计算机想成是和我们一样具备高度智能了。我们没有看到,在我们的潜意识里,我们的大脑又给变量a划出了一个分区来,用以储存a原来的值。正因为有这个多出来的变量,我们才能知道在a被赋予新值之后,它原来的值是多少,也从而知道该把什么值甩给b。而计算机,甚至连金鱼的7秒记忆都没有,一旦a原来的值被覆盖抹去,它就会在一瞬间忘了a等于多少来着?基于计算机的这一特性,我们必须另外声明一个变量,用以储存a原来的值。

4、正确解法与代码示范

4.1 正确算法的伪码模型

现欲交换变量a与变量b的值,则其算法之伪码,当如是表达:

begin临时变量 ← 变量a变量a ← 变量b变量b ← 临时变量end

4.2 程序语言实现

有些同志若不仅仅满足于伪码的,一定要实际编写并运行一下才安逸的,我这里也提供了Java和C语言两种源码,供同志们复制粘贴。

4.2.1 两值交换:Java实现

public class Swap{public static void main(String[] args){int a = 9, b = 3;int temp; //注:互换辅助变量,类型不一定要为int。可根据实际需要,自行调整。变量名一般为temp,但可根据个人喜好进行调整,只要见名知义就好System.out.printf("互换前:a=%d, b=%d\n", a, b);temp = a;a = b;b = temp;System.out.printf("互换后:a=%d, b=%d\n", a, b);}}

4.2.2 两值交换:C语言实现

#include <stdio.h>int main(void){int a = 9;int b = 3;int temp;printf("互换前:a=%d, b=%d", a, b);temp = a;a = b;b = temp;printf("互换后:a=%d, b=%d", a, b);}

4.3 情景设定

我们考虑这样的情景。

暑假的某一天,小贝和他的女朋友小舒约会去爬山。由于天气炎热,两人需要将冰镇饮料装在各自的保温杯里。小贝喝肥宅快乐水,小舒喝珍珠奶茶。但由于他们俩的保温杯是情侣款,外表很相似,导致小贝在倒饮料的时候弄错了,误将自己的杯子里倒了奶茶,小舒的杯子里倒了快乐水。

小舒很生气,要求小贝对此负责,将两个保温杯里的饮料换回来。应该怎么办呢?幸好,小贝发现,自己还多带了一个空碗出来。

于是他:

取出空碗将小舒保温杯里的肥宅快乐水倒入空碗中将自己保温杯里的奶茶倒入小舒的保温杯中将碗里的肥宅快乐水倒入自己的保温杯中

如此,小贝就顺利地完成了两个保温杯饮料的互换。

是不是和程序世界中的两值互换很像?

5、心得

为提高分析程序执行流程的能力,编程初学者需要多加训练,培养计算机式的逻辑思维模式,才能更懂得如何驾驭CPU的心,让电脑乖乖听你的话。于此过程中,我们可能需要纠正一下自己惯用的人类思维,细心地去发掘一些被我们的大脑忽略掉、却实际存在的变量。

毕竟,计算机可不是天生就能理清什么是主要矛盾、什么是次要矛盾,从而选择性地执行命令、绕过冗余的代码,或者智能脑补应有却缺失的代码的。你每写一个语句,它就一定会忠实地、确切地执行,且只会执行你所写的语句。可别指望它能与你心有灵犀一点通,读懂你的内心。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。