08数据结构与算法.ppt

  1. 1、本文档共105页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。 算法的五大特征 1、有穷性(Finiteness)   算法的有穷性是指算法必须能在执行有限个步骤之后终止 2、确切性(Definiteness)   算法的每一步骤必须有确切的定义 3、输入项(Input) 一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件; 4、输出项(Output) 一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 5、可行性(Effectiveness) 算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成;(也称之为有效性) 算法优劣的评价标准 1、正确性 2、可读性 3、健壮性 4、效率 算法与数据结构 算法的描述 给出的冒泡排序算法的基础上,如果我们同时记录第i趟冒泡排序中最后一次发生交换操作的位置m(m=n-i),就会发现从此位置以后的记录均已经有序,即无序区范围缩小在a[1]~a[m]之间,所以在进行下一趟排序操作时,就不必考虑a[m+1]~a[n]范围内的记录了,而只在a[1]~a[m]范围内进行。 冒泡排序比较简单,当初始序列基本有序时,冒泡排序有较高的效率,反之效率较低;其次冒泡排序只需要一个记录的辅助空间,用来作为记录交换的中间暂存单元。 冒泡排序是一种稳定的排序方法。 快速排序又称为分区交换排序。其基本思想是:首先将待排序记录序列中的所有记录作为当前待排序区域,从中任选取一个记录(比如,第一个记录),并以该记录的关键字值为基准,从位于待排序记录序列左右两端开始,逐渐向中间靠拢,交替与基准记录的关键字进行比较、交换,每次比较,若遇左侧记录的关键字值大于基准记录的关键字,则将其与基准记录交换,使其移到基准记录的右侧,若遇右侧记录的关键字值小于基准值,则将其与基准记录交换,使其移至基准记录的左侧,最后让基准记录到达它的最终位置,此时,基准记录将待排序记录分成了左右两个区域,位于基准记录左侧的记录都小于或等于基准记录的关键字,位于基准记录右侧的所有记录的关键字都大于或等于基准记录的关键字,这就是一趟快速排序。 快速排序是一个递归的过程,只要能够实现一趟快速排序的算法,就可以利用递归的方法对一趟快速排序后的左右分区域分别进行快速排序。下面是一趟快速排序的算法分析: (1) 初始化: 将i 和j分别指向待排序区域的最左侧记录和最右侧记录的位置。 i=first; j=end; 将基准记录暂存在temp中。 temp=a[i]; (2) 对当前待排序区域从右侧将要进行比较的记录(j指向的记录)开始向左侧进行扫描,直到找到第一个关键字值小于基准记录关键字值的记录: while (ij temp.key=a[j]) j--; (3) 如果i!=j,则将a[j]中的记录移至a[i],并将i++: a[i]=a[j]; i++; (4) 对当前待排序区域从左侧将要进行比较的记录(i指向的记录)开始向右侧进行扫描,直到找到第一个关键字值大于基准记录关键字的记录: while (ij a[i]=temp.key) i++; (5) 如果i!=j,则将a[i]中的记录移至a[j],并将j++: a[j]=a[i]; j++; (6) 如果此时仍ij,则重复上述(2)、(3)、(4)、(5)操作,否则,表明找到了基准记录的最终位置,并将基准记录移到它的最终位置上: while (ij) { 执行(2)、(3)、(4)、(5) 步骤 } a[i]=temp; void quicksort (DataType a,int first,int end ) { i=first; j=end; temp=a[i]; //初始化 while(ij){ while (ij temp.key= a[j].key) j--; a[i]=a[j]; while (ij a[i].key=temp.key) i++; a[j]=a[i]; } a[i]=temp; if (firsti-1) quicksort(a, first, i-1); if (i+1end) quicksort(a, i+1, en

文档评论(0)

ffpg + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档