十七、排序.ppt

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

十七、排序 1、基本概念 2、插入排序 3、交换排序 4、选择排序 5、归并排序 6、基数排序 7、外部排序 1、基本概念 ⑴排序的定义 设有n个对象的序列为 {R0,R1,· · ·,Rn-1} 其对应的关键字序列为 {K0,K1,· · ·,Kn-1} 对(0,1, · · ·,n-1)确定一种排列(p0,p1, · · ·,pn-1), 使相应的关键字满足非递减(或非递增)关系: Kp0≤Kp1≤· · ·≤Kpn-1 即使n个对象的序列成为 {Rp0,Rp1,· · ·,Rpn-1} 这样一种操作称为排序。 其中:关键字Ki,(i = 0, 1,· · ·, n-1)可以是主关键字,也可以是次 关键字,甚至是若干个属性的组合。 基本概念(续) ⑵稳定的排序 设待排序的序列中有两个或两个以上相等的关键字Ki=Kj, (0≤i,j≤n-1,i≠j),且在排序前的序列中Ri处于Rj之前(即 ij)。若排序后Ri仍处于Rj之前,称此种排序方法是稳定的。 否则称这个排序方法是不稳定的。 ⑶内排序与外排序 根据在排序过程中数据对象是否完全在内存,予以区分。 内排序是指在排序期间数据对象全部存放在内存的排序; 外排序是指在排序期间因数据对象个数太多,按照排序过程 的要求,分若干批放在内存中进行的排序。 ⑷排序的时间开销 按照排序的特点,排序的时间开销用算法执行中关键字比较 次数和数据移动次数来衡量。一般情况下用平均时间估算, 特殊情况也有按最好情况或最坏情况进行估算的。 2、插入排序 ⑴直接插入排序 基本思想:从序列前端开始,把序列分成两部分,前面部分是 已排好序的,即当要处理Ri时, Rp0,Rp1,· · ·,Rpi-1已排好 序。只要用Ri的关键字与 Rpi-1 、Rpi-2、· · ·的关键字顺序比较, 找到插入位置后,将Ri插入,相关的对象向后顺移。反复这个 过程直到序列中所有对象都处理完毕。 void InsertionSort(SeqListDatatype SortableList ) { int firstunsorted, position; Datatype temp; for (firstunsorted = 1; firstunsortedn; firstunsorted + +) if SortableList[firstunsorted]SortableList[firstunsorted-1] { position = firstunsorted; temp = SortableList[firstunsorted]; do { SortableList[position] = SortableList[position-1]; position - -; } while ( postion0 SortableList[position-1] temp; SortableList[position] = temp; } } 直接插入排序的例 示意图 firstunsorted 直接插入排序性能分析 最好情况: 排序前序列已按关键字大小从小到大排列,每一趟只需与比较1 次关键字,移动2次数据对象。总计关键字比较为n-1次,数据 移动2(n-1)次。 最坏情况: 序列处于反序状态。即每一趟必须与前面所有的关键字作比较, 并每做1次比较,就要移动1次数据。总计有n-1趟,因此 总比较次数为 总移动次数为 平均时间复杂度为O(n2) 稳定性:从算法看,显然是稳定的。 其它直接插入排序 ①利用折半搜索确定插入位置 由于前端是有序序列,可以考虑用折半搜索法确定插入位置。 但由于移动次数无法再减少,因此,时间复杂度没有本质改 善。 ②链表结构的直接插入排序 head head current head current 高级插入排序 ⑵Shell排序 产生Shell排序背景 当n不大,并且原序列基本有序的情况下,直接插入有其优势。 基本思想:先将待排序的序列分解成几个子序列,对子序列 进行直接插入排序,然后缩小间距再分解成几个子序列,继 续对它们进行直接插入排序,如此进行若干趟,等到整个序 列基本有序后,再对整个序列施行直接插入排序。 分解子序列的间隔(增量),是一个递减的,又称为减小增量排 序。 增量的序列有:d[k] = 2t-k+1 - 1,其中t为排序总趟数,k为某具体趟次。最后一趟,增量肯定是1,表

文档评论(0)

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

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档