网站大量收购独家精品文档,联系QQ:2885784924

排序的基本概念.ppt

  1. 1、本文档共91页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 排序; 排序,能使杂乱的无序数据变为有序。在将数据按某种规则排列有序后,就能大大提高对其查找和处理的效率。 排序的方法很多,本章专门讨论各种典型的排序方法。 ; 本章主要介绍以下几个方面的内容: ? 排序的基本概念; ? 基本的插入排序(直接插入排序、折半插入排序、表插入排序)算法; ? 基本的交换排序(冒泡排序、快速排序)算法; ? 基本的选择排序(直接选择排序、堆排序)算法。 ;9.1 排序的基本概念; 假定待排序记录中存在有相同关键字。若经某种排序之后,那些有相同关键字值的记录间的相对位置保持不变,那么称这种排序方法是“稳定的”,否则就是“不稳定的”。; 所谓“内排序”,是指待排记录序列全部存放在内存,整个排序过程也都在内存里完成;所谓“外排序”,是指内存中容纳不下所有待排记录序列,排序过程中需要不断地与外存进行数据交换。 本章只介绍有关内排序的算法。;;9.2 插 入 排 序; 基本思想是:初始时认可第1个记录已排好序,从第2个记录开始,总是用第i(2≤i≤n)个记录与前面排好序的i?1个记录的子序列进行顺序比较,插入到它的相应位置,得到i个排好序的子序列。这一过程一直进行到最后一个记录时结束。; 例:已知待排序记录的关键字为: 77,44,99,66,33,55,88,22 利用直接插入排序完成对它们的排序,给出最终的排序结果。 解:把所有待排记录存放在一个一维数组r里,如图9-1的“初始状态”所示。 ;图9-1 直接插入排序的过程 ; 用一维数组r做存储结构,n表示记录个数,MAXSIZE是常量并且 MAXSIZEn。约定n个记录分别存放在r[1],r[2],…,r[n]之中。 直接插入排序算法如下:; void stinsort ( node r[MAXSIZE], int n) {for (i=2; i=n; i++) /*共进行n-1趟插入*/ {r[0]=r[i];/* r[0]为监视哨*/ j=i-1; while (r[j].key r[0].key) {r[j+1]=r[j];j--;} r[j+1]=r[0]; /*将r[0]即原r[i]记录内容,插到r[j]后一位置*/ } }/*sinsort*/;分析; 例:有待排记录关键字序列: 49,66,35,76,25,85,76,32 利用直接插入排序算法进行排序,并考察它的稳定性。 ;图9-2 直???插入排序算法和稳定性; 当直接插入排序进行到某一趟时,对于r[i].key来讲,前边i-1个记录已经按关键字有序。此时不用直接插入排序的方法,而改为折半查找,找出r[i].key应插的位置,然后插入。这种方法就是折半插入排序(Binary insertion sort)。 算法如下:;;; 图9-6 :待排序的7个记录的关键字为:55、23、72、68、36、84、41,现在前6个关键字已经排好序。使用折半插入排序算法,来观察第7个关键字41的插入排序过程。 ;图9-6 折半插入排序的局部过程 ;;;9.2.3 希尔排序;算法思路:;;;;;;9.3 交 换 排 序; 实施冒泡排序时,要对n个记录的关键字序列进行n?1次扫描。每次扫描时,都从下到上对相邻的两个关键字进行比较,如果不符合由小到大的顺序,就将它们交换位置。 ; 这样,经过第1次扫描,就能从n?1对相邻关键字的比较中,把关键字序列里最大的元素渐渐地移动到序列的最上边;经过第2次扫描,就能从n?2对相邻关键字的比较中,把关键字序列里次大的元素渐渐地排到序列的次上位置;如此最多经过n?1次扫描,n个关键字都排到了自己应该位于的位置。; 例:有待排的记录关键字序列:84、30、73、、26、51,把它们存放在一个一维数组A里,然后对它们进行冒泡排序,最后给出排序结果。;图9-9 冒泡排序过程示例;冒泡排序算法; 例:图9-10待排记录的关键字序列:77、44、99、66、33、55、88、22,进行冒泡排序的示例。 ;图9-10冒泡排序示例;;;;; 快速排序的基本思想是:在待排序的n个关键字序列里,选择一个基准元素x,称其为“枢轴(Pivot)”。通常,把序列的第1个元素选为枢轴,也可以把位于序列中间位置的元素选为枢轴。然后把所有小于等于x的关键字调整到x的左边,把大于x的关键字调整到x的右边。这被称为是快速排序的一次划分。 ; 继续对左、右两个部分重复进行相同的这种划分过程,每次划分后就会让作为枢轴的关键字位于它最终应该在的位置上,直到最后分割

文档评论(0)

实验室仪器管理 + 关注
实名认证
服务提供商

本人在医药行业摸爬滚打10年,做过实验室QC,仪器公司售后技术支持工程师,擅长解答实验室仪器问题,现为一家制药企业仪器管理。

1亿VIP精品文档

相关文档