- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[IT认证]哈尔滨工业大学软件工程课件-5
* 在上述程序中,由于把 j+2 移到了内循环之外,所一只执行了3 次 j+2 的运算。从而减少了57次。 所以说,。。。 。。。 * 另外,我们再来看,在上述程序中的 i+1 共要进行 60次+60次=120次的加 1运算。 那如果我们把程序再稍加改动,则程序的运行效率将又有所提高。 请见右侧程序:。。。 。。。 从中可见,原来要执行120次的 i+1 ,则现在只需要进行计算 60次 了。可见而知,效率提高了一倍。 所以,从修正以后的程序中,我们可以看出,无论是程序的运行效率还是程序的清晰度,都可以说是比较好的一个程序 * 从中可见,原来要执行120次的 i+1 ,则现在只需要进行计算 60次 了。可见而知,效率提高了一倍。 所以,从修正以后的程序中,我们可以看出,无论是程序的运行效率还是程序的清晰度,都可以说是比较好的一个程序 * * 比较交换法:容易理解,但交换次数较多,只要 a[j]a[i] ,就要交换一次数据,如果原来的数据恰恰是由大到小排列的,那么,则每比较一次就要交换一次,按上例所说的,第一轮要比较和交还次,第二轮8次,第三轮7次 。。。 。。。 第9轮1次,一共就需要交换数据 9+8+7+6+5+4+3+2+1=45(次)。 请看下页采用的选择法。 * 如果我们对算法进行改进的话,那么,在每一轮的比较中不必每当 a[j]a[i] 就交换数据,而应在 a[i+1] ---- a[9] 都比较完后,再将a[i] 与 a[i+1]----a[9] 中的值最小的那个元素对换即可。 例如,在第一轮的比较中,先将 a[1] 与 a[2] 比,如果, a[1] a[2] ,不作互换,而是把 a[2] 的下标 “2” 记载下来,表示 “在已经比较过的数据中,最小的数在下标为 ” 2 “ 的数组元素中”。 所谓记载下来,就是说,将下标 “2” 存放在一个变量 k 中 ,设有10个原来次序是由大到小排列的数。设一个变量k,用它来“指向”某一个数组元素,它开始指向 a[1], 以后每比完一次后,哪个数最小,则k 就指向该数。先将 a[1] 和 a[2] 相比较,如: 99 122 , 即a[2]a[1] ,此时,不将a[1] 与 a[2] 互换,而是使 k指向 a[2],表示在a[1]与a[2] 的两个数中,a[2]为最小,。。。。。。。。 如此反复进行下去,直到内循环结束后,也就是第一轮比较完后,应将a[1]与a[k]中的数对换,,而其它8个数均不动,显然交换的次数要比上页程序中所用的“比较交换法”少得多。 同理,在第二轮的比较中,先令k=2,然后再将 a[k]与a[3]---a[10] 进行比较,如果第一个a[j] 大于 a[k] ,则将 a[j] 的下标 赋给 变量 k ,在比完第二轮后 ,a[k] 是9个数中最小者 ,令 a[2] 与a[k] 对换。。。。。。。。。 以后都以此类推,直到比较完轮为止。 上述中的外循环是用来控制比较的 “ 轮 ” 数,循环变量 i 由1变到9 ,表示共进行9轮比较。 “ k=i “ 的意思是:在第一轮中使k 的初始为 1 ,在第二轮中使 k的初始值为 2 。。。 。。。在每比完一轮后,都使 a[k] 与 a[i] 对换。 * 在上述程序中一共用了6个goto语句,一个向前,5个向后,显然这不是一个结构化程序,程序可读性差。 * 早在1963年,针对当时流行的 ALGOL语言,Peter 就指出,在程序中大量地、没有节制地使用GOTO语句,就会使程序结构变得非常混乱。但是很多人还不太注意这一问题。以致许多人写出来的程序仍然是纷乱如麻的。 如上图表示的那样:。。。。。。。。。。。。。。。。 所以在1965年 的一次会议上有人就提出:应当把GOTO语句从高级语言中取消。并指出,程序的质量与程序中包含的GOTO语句的数量成反比。在这种思想的影响下,当时新开发的几种高级程序设计语言,例如,LISP,BLISS 等都没有GOTO 语句。但是,由于GOTO语句概念简单,使用方便,在某些情况下还要保留GOTO语句,所以在70年代初期,N.Wirth在设计Pascal语言的时候,就又保留了GOTO语句。也就是说,在一般情况下,可以完全不使用GOTO语句。如果在
文档评论(0)