数据结构复习指导10.docVIP

  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

内部排序 基础知识和算法 排序的有关概念 排序(按关键字大小顺序排列数据)。 排序方法:内部排序,外部排序;简单的排序方法O(n2),先进的排序方法O(nlogn),基数排序O(dn);插入排序,交换排序,选择排序,归并排序,计数排序。 排序方法的稳定性:取决于该方法采取的策略,不是由一次具体的排序结果决定的。但是通过列举不稳定的排序实例可以说明该排序算法的不稳定性。 直接插入排序 思路 将待排序记录插入已排好的记录中,不断扩大有序序列 一句话,“将待排序记录插入有序序列,重复n-1次”。 例:52,49,80,36,14,58,61 进行直接插入排序。 分析 表 10.1 直接插入排序 比较 移动 记录顺序有序时 n-1 0 最好 记录逆序有序时 ((n+2)(n-1))/2 ((n+4)(n-1))/2 最坏 平均n2/4,算法的时间复杂度O(n2)。直接插入排序是稳定的排序算法。 折半插入排序 思路 在直接插入排序中,查找插入位置时采用折半查找的方法。 程序 void BinInsertSort ( T a[], int n ) { for ( i=1; in; i++ ) { // 在a[0..i-1]中折半查找插入位置使a[high]≤a[i]a[high+1..i-1] low = 0; high = i-1; while ( low=high ) { m = ( low+high )/2; if ( a[i]a[m] ) high = m-1; else low = m+1; } // 向后移动元素a[high+1..i-1],在a[high+1]处插入a[i] x = a[i]; for ( j=i-1; jhigh; j-- ) a[j+1] = a[j]; a [high+1] = x; // 完成插入 } } 分析 时间复杂度O(n2)。比直接插入排序减少了比较次数。折半插入排序是稳定的排序算法。 希尔排序(缩小增量排序) 思路 先将待排序列分割成若干个子序列,分别进行直接插入排序,基本有序后再对整个序列进行直接插入排序。 步骤: 10. 分成子序列(按照增量dk); 20. 对子序列排序(直接插入排序); 30. 缩小增量,重复以上步骤,直到增量dk=1。 增量序列中最后一个增量一定是1,如:... 9, 5, 3, 2, 1和... 13, 4, 1。如没有明确说明增量序列可以选择... 3, 2, 1或... 5, 3, 2, 1。 例:希尔排序(52,49,80,36,14,58,61)。 注意:希尔排序是不稳定的。时间复杂度大约为O(n3/2)。 程序 void ShellSort ( T a[], int n ) { dk = n/2; while ( dk=1 ) { // 一趟希尔排序,对dk个序列分别进行插入排序 for ( i=dk; in; i++ ) { x = a[i]; for ( j=i-dk; j=0 and xa[j]; j-=dk ) a[j+dk] = a[j]; a[j+dk] = x; } // 缩小增量 dk = dk/2; } } 起泡排序 思路 一句话,“依次比较相邻元素,‘逆序’则交换,重复n-1次”。 例:冒泡排序(52,49,80,36,14,58,61)。 程序 请参考第1章 二、BubbleSort算法。 分析 比较和交换总是发生在相邻元素之间,是稳定的排序算法。时间复杂度O(n2)。 快速排序 思路 一趟排序把记录分割成独立的两部分,一部分关键字均比另一部分小,然后再分别对两部分快排。 例:{52 49 80 36 14 58 61} 快速排序。 下面是一次划分的详细步骤: 整个快速排序过程如下: 程序 void QuickSort ( T a[], int low, int high ) { if ( low high ) { // 划分 pivot = a[low]; i = low; j = high; while ( i j ) { while ( ij a[j] = pivot ) j--; a[i] = a[j]; while ( ij a[i] = pivot ) i++; a[j] = a[i]; } a[i] = pivo

文档评论(0)

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

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

1亿VIP精品文档

相关文档