本帖最后由 yufang1993 于 2015-11-8 23:41 编辑
思路,(逻辑)远比代码重要.思路清晰合乎逻辑,代码会自然'生'出来,代码只是思路的具现.
就拿排序说起.需求:将1,2,4,3,8,5从大到小排序
思路:
1.我们操作的对象是计算机,最底层是硬件,也就是超大集成电路,是开关,开,关,开,关.
2.什么是排序?(计算机不可能知道什么是排序,只是按照我们的规定指示运行的)
排序就是将一组数按照一定的规则排列组合.
3.什么规则?
从大到小,从小到大,一大一小,一大一小,等等都可以是规则.规则是指定的,没有进一步的理由.,就是要指定这样.
4.什么是大呢?
大和小仍然只是约定,看你从什么角度怎么说.比如我说一个人同时做两件事不如专心做一件事,一心一意会做得更好,这时候说一比二大就没有问题.回到题目,我们指定2比1大,当满足条件,电路或者开,或者关,这是计算机能理解的.
5.不管计算机中的排序是怎样实现的,总不能违背人的思考方式,看待世界的方式.比如军训中教官让同学从高到低排队.我们都能做到,怎么实现的呢?
首先,要知道什么是高,什么是低.
其次,知道何为高,何为低,我们是不是要左右看看?这就是比较,挨个比较,1比2大么?于是想到要用到判断语句.不,1和2换个位置,在数组中,这一步可以通过换角标值实现.或者通过临时变量实现.这里要用到交换值.
再者,接下来就是挨个比较,2比4大么?满足,就把二者换个位置,不满足就不变.于是有两个动作是重复的,比较,交换值,于是想到循环,循环有while ,do while ,for ,用哪一种呢?因为每个语句的具体应用不同,那就要看看现实条件是怎样的.
又,一次循环结束并不能实现想要的结果,有必要进行第二次,于是想到这里有循环的嵌套,最直接想到的就是for循环,
到这里,大的框架基本出来了
接着要考虑的是循环的开始条件,和终止条件.比较的左边一项从角标为零的元素开始,比较的右边是角标(0+1)的元素,很容易想到定义一个变量int a=0,判断条件为arr[a]<arr[a+1].我这儿就不继续分析下去了.
我自己在那里画图琢磨搞了两小时才整出来,期间也曾凭记忆套老师的代码,但是,不是这儿出问题就是那儿出问题,看着好像是这样,一报错又觉得好像不是这样,,最后想想不成,从头按逻辑自己一步一步的分析过程写下来,然后逐步用代码实现这些思路步骤.,结果倒是一下子就对了,不像之前修修改改,分不清到底是在背代码还是真的理解了.
计算机遵循的东西是死的,必须的一步一步来实现,我感觉,敲代码最重要的就是遵循着基本的逻辑,一步一步,囫囵吞枣不得,也一步登不了天. |
|