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

数据结构 10内部排序A.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 10内部排序A

数据结构课程的内容 第10章 内部排序 10.1 概述 4. 什么叫内部排序?什么叫外部排序? 6. 顺序存储(顺序表)的抽象数据类型如何表示? 7. 内部排序的算法有哪些? 10.2 插入排序 1) 直接插入排序 例2:关键字序列T= (21,25,49,25*,16,08), 请写出直接插入排序的具体实现过程。 直接插入排序的算法分析 2) 折半插入排序 折半插入排序的算法分析 3)表插入排序 例:关键字序列 T=(21,25,49,25*,16,08), 请写出表插入排序的具体实现过程。 表插入排序的算法 表插入排序算法分析: 4)希尔(shell)排序(又称缩小增量排序) 例:关键字序列 T=(49,38,65,97, 76, 13, 27, 49*,55, 04),请写出希尔排序的具体实现过程。 时间效率: 希尔排序算法(其中某一趟的排序操作) 附:希尔排序算法分析 课堂练习: 原始序列: 256,301,751,129,937,863,742,694,076,438 原始序列: 256,301,751,129,937,863,742,694,076,438 10.3 交换排序 1) 冒泡排序 冒泡排序的算法分析 2) 快速排序 例1:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。 1.这种不断划分子表的过程,计算机如何自动实现? 例2:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序算法的一趟实现过程。 一趟快速排序算法流程图 整个快速排序的递归算法: 例3:以关键字序列(256,301,751,129,937,863,742,694,076,438)为例,写出执行快速算法的各趟排序结束时,关键字序列的状态。 快速排序算法详细分析: 讨论2. “快速排序”是否真的比任何排序算法都快? pivotkey=r[low].key; //取支点的关键码存入pivotkey变量 while(low high){ //从表的两端交替地向中间扫描 while(lowhigh r[high].key=pivotkey ) - -high; r[low]=r[high]; //将比支点小的记录交换到低端; while(lowhigh r[low].key=pivotkey) + +low; r[high]=r[low]; //将比支点大的记录交换到高端; } r[low]=r[0]; //支点记录到位; return low; //返回支点记录所在位置。 }//Partition Low=high=3,本趟停止,将支点定位并返回位置信息 0 第1趟 08 16 25* 49 25 21 初态 6 5 4 3 2 1 r[i] high low 21 08 25 16 49 25* 3 21 pivotkey=21 08 25 16 49 { 08 ,16 } 21 { 25* , 49, 25 } 25*跑到了前面,不稳定! low low high high j从高端扫描 寻找小于pivot的元素 i从低端扫描 寻找大于pivot的元素 i=low; j=high;r[0]=r[low]; pivot=r[low].key; i j i j r[j].key=pivot --j; r[i] = r[j]; i j r[i].key=pivot --i; r[j] = r[i]; r[i] = r[0]; return ok; Y Y Y N N N void QSort ( SqList L, int low, int high ) { if ( low high) { pivot = Partition ( L, low, high ); QSort ( L, low, pivot-1); QSort ( L, pivot+1, high ); } } 见教材P276 //长度1 //对顺序表L中的子序列r[ low…high] 作快速排序 //一趟快排,将r[ ]一分为二 //在左子区间进行递归快排,直到长度为1 //在右子区间进行递归快排,直到长度为1 //QSort 新的low void QuickSort ( SqList L) { QSort (L, 1, L.length ); } 对顺序表L进行快速排序的操作函数为: 原始序列: 256,301,751,129,937,863,742,694,076,438 第1趟 第2趟

文档评论(0)

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

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档