第9章内部排序A题材.pptVIP

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程的内容;9.1 概述 9.2 插入排序 9.3 交换排序 9.4 选择排序 9.5 归并排序 9.6 基数排序;9.1 概述;4. 什么叫内部排序?什么叫外部排序? ;注:大多数排序算法都是针对顺序表结构的(便于直接移动元素);7. 内部排序的算法有哪些?;9.2 插入排序;1) 直接插入排序;例2:关键字序列T= (21,25,49,25*,16,08), 请写出直接插入排序的具体实现过程。;若设待排序的对象个数为n,则算法需要进行n-1次插入。 最好情况下,排序前对象已经按关键码大小从小到大有序,每趟只需与前面的有序对象序列的最后一个对象的关键码比较 1 次,移动 2 次对象。因此,总的关键码比较次数为n-1,对象移动次数为 2(n-1)。;最坏情况下,第i趟插入时,第i个对象必须与前面i-1个对象都做关键码比较,并且每做 1 次比较就要做 1 次数据移动。则总的关键码比较次数KCN和对象移动次数RMN分别为;若待??序对象序列中出现各种可能排列的概率相同,则可取上述最好情况和最坏情况的平均情况。在平均情况下的关键码比较次数和对象移动次数约为 n2/4。因此,直接插入排序的时间复杂度为 o(n2)。 直接插入排序是一种稳定的排序方法。;2) 折半插入排序;折半插入排序的算法分析;3)表插入排序;1;int LinkInsertSort ( staticlinklisType list ) { list.v[0].Key = MaxNum; list.v[0]. Link = 1; list.v[1].Link = 0; //形成循环链表;表插入排序算法分析:;4)希尔(shell)排序(又称缩小增量排序);38;void ShellSort(SqList L,int dlta[ ],int t){ //按增量序列dlta[0…t-1]对顺序表L作Shell排序 for(k=0;kt;++k) ShellSort(L,dlta[k]); //增量为dlta[k]的一趟插入排序 } // ShellSort;附:希尔排序算法分析;void ShellInsert(SqList L,int dk) { for(i=dk+1;i=L.length; ++ i) if(r[i].key r[i-dk].key) { r[0]=r[i]; for(j=i-dk; j0 (r[0].keyr[j].key); j=j-dk) r[j+dk]=r[j]; r[j+dk]=r[0]; } };课堂练习:;原始序列: 256,301,751,129,937,863,742,694,076,438;原始序列: 256,301,751,129,937,863,742,694,076,438;9.3 交换排序; 1) 冒泡排序;冒泡排序的算法分析;2) 快速排序;( ),;1.这种不断划分子表的过程,计算机如何自动实现?;pivotkey=r[low].key; //取支点的关键码存入pivotkey变量;Low=high=3,本趟停止,将支点定位并返回位置信息;j从高端扫描 寻找小于pivot的元素;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 ); } };例3:以关键字序列(256,301,751,129,937,863,742,694,076,438)为例,写出执行快速算法的各趟排序结束时,关键字序列的状态。;快速排序算法详细分析:;在最坏的情况,即待排序对象序列已经按其关键码从小到大排好序的情况下,其递归树成为单支树,每次划分只得到一个比上一次少一个对象的子序列。这样,必须经过 n-1 趟才能把所有对象定位,而且第 i 趟需要经过 n-i 次关键码比较才能找到第 i 个对象的安放位置,总的关键码比较次数将达到n2/2 快速排序是一个不稳定的排序方法;讨论2. “快速排序”是否真的比任何排序算法都快?

文档评论(0)

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

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

1亿VIP精品文档

相关文档