数据结构与算法(10)..pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
§10.5 基数排序 基数排序(radix sort)是和前面所介绍的排序方法(基于比较的排序方法)完全不同的一种排序方法,它是一种分配排序。 多关键字排序: 如 52 张扑克牌按以下规则排成有序: 可以看出:牌点是决定大小的主要因数(34… 10J QKA2),花色则是决定大小的次要因数(DiamondClub HeartSpade),只有在牌点相同时,它才起作用。 因此我们称牌点为高位关键字,花色为 D3C3H3S3D4C4…HASAD2C2H2S2 一般的,设有 n 个记录序列( R1,R2,…,Rn ),每个记录 Ri 均含有 d 个关键字( Ki1,Ki2,…,Kid ), 则称此序列对关键字( K1,K2,…,Kd )有序,是指序列中任意两个记录 Ri 和 Rj ( 1 ≤ i ≤ j ≤ n )都满足有序关系:( Ki1,Ki2,…,Kid )≤ ( Kj1,Kj2,…,Kjd ),其中 K1 称为最高位关键字, Kd 称为最低位关键字。 那么应如何实现序列的多关键字排序呢? 低位关键字, 决定元素的大小主要看高位关键字,低位关键字只有在高位关键字相等时才发挥作用。 * 第十章. 内部排序 (Chapter 10. Internal Sorting) 排序又称分类,是计算机中最重要的操作,它是将一个数据元素(或记录)的任意序列排列成一个按关键字有序的序列。 若待排序列中存在两个或以上关键字相等的记录,设Ki=Kj (1≤i j≤n),即排序前 Ri 在 Rj 前,若在排序后 Ri 仍在 Rj 前,则称排序是稳定的。 稳定的排序方法(stable sorting method) 排序(sorting) 不稳定的排序方法(unstable sorting method) 待排序列中存在两个或以上关键字相等的记录,设Ki=Kj (1≤i j≤n),即排序前 Ri 在 Rj 前,若在排序后 Rj 却在 Ri前,则称排序是不稳定稳定的。 内部排序(internal sorting) 待排序列记录全部存放在计算机随机存储器中进行排序的过程称为内部排序。 外部排序(external sorting) 待排序列记录数量太大,不能全部存放在计算机随机存储器中,排序过程中需对计算机外存进行访问,这种排序过程称为外部排序。 1、比较操作:比较两个关键字值的大小的操作。 排序过程中的两种基本操作: 2、移动操作:将记录从一个位置移动到另一个位置的操作。 待排序列的三种存储结构: 1、顺序存储:存储在地址连续的一组存储单元中(以此为例)。 2、链式存储:存储在地址不连续的一组存储单元(链表)中。 3、地址存储:记录顺序存储,另设关键字和记录地址排序。 typedef struct { keytype key; . . . . . . } elemtype; typedef struct { elemtype * elem; int length; } sqlist; §10.1 插入排序 一、直接插入排序: 直接插入排序(straight insertion sort)是一种最简单的排序方法:将记录一个个插入到已排序好的有序表中,从而得到长度增加的新的有序表。 void straightinsertsort ( sqlist R ) { for ( i = 2 ; i = R.length ; i++ ) if ( R.elem[i].key R.elem[i-1].key ) { R.elem[ 0 ] = R.elem[ i ] ; R.elem[ i ] = R.elem[ i-1 ] ; for ( j=i-2 ; R.elem[0].key R.elem[j].key ; j-- ) R.elem[ j+1] = R.elem[ j ]; R.elem[ j+1 ] = R.elem[ 0 ] ; } } 排序性能分析: 比较次数: 最好情况 — n-1 最坏情况 — (n+2)(n-1)/2 平均比较次数: (n+4)(n-1)/4 二、折半

文档评论(0)

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

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

1亿VIP精品文档

相关文档