数据结构第9章排序培训讲学.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程的内容;9.1 概述 9.2 插入排序 9.3 交换排序 9.4 选择排序 9.5 归并排序 9.6 基数排序;9.1 概述;注:大多数排序算法都是针对顺序表结构的(便于直接移动元素);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) 折半插入排序;折半插入排序的算法分析;4)表插入排序;1;int LinkInsertSort ( staticlinklisType list ) { list.v[0].Key = MaxNum; list.v[0]. Link = 1; list.v[1].Link = 0; //形成循环链表;表插入排序算法分析:;5)希尔(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. “快速排序”是否真的比任何排序算法都快?; 基本思想是: 每一趟 (例如第 i 趟, i = 0, 1, …, n-2) 在后面 n-i 个待排序对象中选出排序码最小的对象, 作为有序对

文档评论(0)

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

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

1亿VIP精品文档

相关文档