数据结构第十章幻灯片.ppt

  1. 1、本文档共56页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程的内容;排序:将一个数据元素(或记录)的任意序列,重新 排列成一个按关键字有序的序列 内部排序:将待排记录存放在计算机随机存储器重进 行的排序过程。 外部排序:由于待排记录的数量很大,以至内存一次 不能容纳全部记录,在排序过程中尚需要 对外存进行访问的排序过程。 ;第10章 内部排序;10.1 概述;2、关键字;3、排序的目的是什么?;5、什么叫内部排序?什么叫外部排序;6、待排序记录在内存中怎样存储和处理;6. 顺序存储(顺序表)的抽象数据类型如何表示?;7. 内部排序的算法有哪些?;10.2 插入排序;(1)直接插入排序;例1:关键字序列T=(13,6,3,31,9,27,5,11), 请写出直接插入排序的中间过程序列。;void InsertSort(SqList L) { // 对顺序表L作直接插入排序。 int i, j; for (i=2; i=L.length; ++i) if (LT(L.r[i].key, L.r[i-1].key)) { // 时,需将L.r[i]插入有序子表 L.r[0] = L.r[i]; // 复制为哨兵 for (j=i-2; LT(L.r[0].key, L.r[j].key); --j) L.r[j+1] = L.r[j]; // 记录后移 L.r[j+1] = L.r[0]; // 插入到正确位置 } } // InsertSort;例2:关键字序列T= (21,25,49,25*,16,08), 请写出直接插入排序的具体实现过程。;特点:因为R[1…i-1]是一个按关键字有序的有序序列,则可以利用折半查找实现在R[1…i-1]中查找R[i]的插入位置,如此实现的插入排序为折半插入排序。 限制:必须采用顺序存储方式。 ;例:有6个记录,前5 个已排序的基础上,对第6个记录排序。 [ 15 27 36 53 69 ] 42 ? low ?mid ? high [ 15 27 36 53 69 ] 42 ?low ? high ?mid [ 15 27 36 53 69 ] 42 ?high ?low [ 15 27 36 42 53 69 ] ;2) 折半插入排序; 设待排序的关键码分别为 28,13,72,85,39,41,6,20。按二分法插入排序算法已使前七个记录有序,中间结果如下:;3)希尔(shell)排序(又称缩小增量排序);例:关键字序列 T=(49,38,65,97, 76, 13, 27, 49*,55, 04),请写出希尔排序的具体实现过程。;时间效率:;写出采用SHELL排序算法排序的每一趟的结果,并标出数据移动情况。 (125,11,22,34,15,44,76,100,8,14,20,2,5);9.3 交换排序; 1) 冒泡排序;冒泡排序的算法分析;2) 快速排序; 一趟快速排序采用从两头向中间扫描的办法。 假设原始数据已存于一个一维数组r中,具体的做法是:设两个指示器i和j,初始时i指向数组中的第一个数据,j指向最末一个数据。i先不动使j逐步前移,每次对二者所指的数据进行比较,当遇到r[i]大于r[j]的情况时,就将二者对调位置;然后令j固定使i逐步后移做数据比较,当遇到r[i]大于r[j] 时,又进行位置对调;然后又是i不动使j前移作数据比较;……; 如此反复进行,直至i与j两者相遇为止。;25*跑到了前面,不稳定!;例1:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。;例3:以关键字序

文档评论(0)

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

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

1亿VIP精品文档

相关文档