程序中算法.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
程序中算法

【关键词】 C语言?算法? 程序 ?算法(Algorithm),是程序的灵魂。著名计算机科学家、图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序。可见,算法在程序中占有非常重要的地位。 在实际的软件开发项目中,不管是有意设计或是无意为之,我们几乎随时在和算法打交道。小到定义一个变量,大到编写一个函数,这些都是算法的实现过程。 本文以作者实际项目工作为背景,介绍算法在C程序中的应用。 1.算法概述 什么是算法呢?先来看一看一些计算机书籍中的定义。 经典书籍《算法导论》(Cormen等著,机械工业出版社)中,作者认为算法是一系列的计算步骤,用来将输入数据转换成输出结果。 谭浩强老师的《C程序设计》书中,算法被定义为是为解决一个问题而采取的方法和步骤。 《算法设计与分析—C++语言描述》(陈慧南编著,电子工业出版社)一书中,作者认为算法是求解一类问题的任意一种特殊方法,一个算法是对特定问题求解步骤的一种描述。 以上对算法的定义都是偏重理论,在实际的软件开发项目中,算法是用程序代码实现软件需求的方法,是软件开发工程师逻辑思维的体现。 2.算法的图形化表示 为了形象化地体现出算法,不同的学者设计出了不同的方法,这些方法包括:自然语言,流程图,N-S流程图,伪代码等。在实际的编程工作中,大都采用流程图来直观地表示算法。流程图逻辑清晰,很适合开发人员使用。 软件开发项目中一些常用的流程图符号如图1所示。 图1 一些常用的流程图符号 使用流程图的好处包括:第一,有利于开发人员参照来检查算法的正确性和完整性;第二,有利于其他人员参照来对程序进行同行评审(代码评审);第三,有利于对程序的长期维护。 3.算法在实际软件开发项目中的应用 对于以算法立足的公司,像Google、百度等,算法就非常的重要,他们有专门的算法工程师岗位;对于做产品的公司,相对而言,做出产品来是最主要的,他们注重的是算法在产品中的应用。 但不管是专门的算法工程师,还是一般的软件开发工程师,我们都会经常与算法打交道。以下介绍作者本人在项目工作中所遇到过的一些算法问题。 3.1多线程实现程序功能的独立 在有关计算机操作系统这类书中,对线程有很多的介绍,其好处之一就是可以让计算机并行地实现很多操作。在实际的软件开发项目中,线程其实就是实现某功能的函数,可实现程序不同功能的独立性。 在某项目中,之前的开发人员创建了一个线程用来实现三个独立的功能:从数据库中扫描出数据生成本地文件(功能A)、删除数据库中的过期记录(功能B)、删除本地的过期文件。由于这三个功能互相没有关联,但又放在同一个函数中,需要按照功能A、功能B、功能C的顺序来执行,这不仅严重影响了程序的执行效率(如果功能A执行时间很长,那么功能B和功能C就要很久才会执行到),而且使这一个函数的代码行数显得非常多,不符合编程规范。此时,该函数的流程如图2所示。 图2 单线程函数执行流程 在C语言中,创建线程的函数主要有CreateThread和_beginthread。 在某项目中,有一个需求时实现按账目时间早晚顺序出账单,即一个用户可能由多笔消费账单,而打出的账单要按照他消费的先后顺序显示出每条账目的具体情况。这时,作者就采用了冒泡排序法来实现该需求。 冒泡排序法的思路是这样的:数组中每个元素都重复地走访要排序的数组,一次只和一个元素比较,如果它们的顺序错误,就把它们交换过来。走访数组的工作是重复地进行直到没有再需要交换的为止。该算法的代码实现如下: for (iOuterLoop = 0; iOuterLoop NumOfArray; iOuterLoop ++) { ??????? for (iInnerLoop = 0; iInnerLoop NumOfArray-iOuterLoop-1; iInnerLoop ++) ??????? {   ??????? if (Array[iInnerLoop] Array[]iInnerLoop+1])?? //需要进行交换   ?????? ?{ ??????????????????? ???? iTempVar = Array[iInnerLoop];  ??????? ??? ?? Array[iInnerLoop] = Array[iInnerLoop+1];   ????????????? ? Array[iInnerLoop+1] = iTempVar; ??????????????? ?}   } } 有关此类排序问题经常出现在大小不同的软件开发项目中,因此在最开始学习算法的时候,一定要将基础打牢。 3.3用分治法解决删除数据库中数据效率低下问题 在某软件产品发布之后,现场反馈回了一个问题

文档评论(0)

phltaotao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档