网站大量收购独家精品文档,联系QQ:2885784924

[工学]5 数据结构_4.ppt

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

数据结构课程的内容 第二章 数据结构 2.5 查找和排序 2.5.1 查找 一、线性查找( 又称顺序查找) 二、对分查找(又称二分查找或折半查找) 折半查找举例: 请注意:ASL的含义是“平均每个数据的查找时间”,而前式是n个数据查找时间的总和,所以: 三、分块查找(索引顺序查找) 分块查找过程举例: 课堂练习:  题:对序列(8,10,15,26,35,47,59,63)进行折半查找15,要经过   次比较。  A、2   B、3   C、4 D、5 四、散列查找(又称哈希/hash查找) 1)哈希表的概念 例2 : 2)哈希函数的构造方法 冲突现象举例: 在哈希查找方法中,冲突是不可能避免的,只能尽可能减少。 3)冲突处理方法 开地址法简介 例: 讨论1: 先讨论: 4. 什么叫内部排序?什么叫外部排序? 一、选择排序 1)简单选择排序 例:关键字序列T= (21,25,49,25*,16,08),请给出简单选择排序的具体实现过程。 简单选择排序的算法如下: 二、插入排序 1)线性(直接)插入排序 例2:关键字序列T= (21,25,49,25*,16,08), 请写出直接插入排序的具体实现过程。 线性插入排序算法的实现: 课堂练习:  题:对n个数列排序,采用线性插入排序的方法,要进行   趟排序? A、n   B、n-1  C、n+1 D、(n-1)/2 2) 折半插入排序 三、交换排序 1) 冒泡排序 冒泡排序算法的实现: for( i=1; in; i++ ) //共进行n-1趟比较    { for( j=1; j=n-i ; j++) //进行第i趟比较时,共进行 n-i 次比较   if(A[j].keyA[j+1].key) //交换排序 { t=A[j]; A[j]=A[j+1]; A[j+1]=t; } } 冒泡排序的算法分析 课堂练习:  题:对n个记录进行冒泡排序,最少的比较次数为 ,最少的交换次数为 。 2) 快速排序 例1:关键字序列 T=(21,25,49,25*,16,08),请写出快速排序的算法步骤。 例2:关键字序列 T=(21,25,49,25*,16,08),计算机如何实现快速排序算法的某一趟过程? 例3:以关键字序列(256,301,751,129,937,863,742,694,076,438)为例,写出执行快速算法的各趟排序结束时,关键字序列的状态。 讨论2. “快速排序”是否真的比任何排序算法都快? 思考:若初始记录基本有序,选用哪种排序方法比较适合? 各种内部排序方法的比较 原始序列: 21,25,49,25*,16,08 第1趟 第2趟 第3趟 第4趟 第5趟 08,25,49,25*,16,21 08,16, 49,25*,25,21 08,16, 21,25*,25,49 08,16, 21,25*,25,49 08,16, 21,25*,25,49 时间效率: O(n2)——虽移动次数较少,但比较次数仍多。 空间效率:O(1)——用到1个temp单元 算法的稳定性:不稳定——因为排序时,25*到了25的前面。 最小值 08 与T[1]交换位置 Void SelectSort(SqList L ) {for (i=1; ilength; ++i) { j = SelectMinKey(L,i); if( i!=j ) L[i] ?L[j]; } } //对顺序表L作简单选择排序 //选择第i小的记录,并交换到位 //在r[i…length]中选择最小记录并定位j //与第i个记录交换 讨论:能否利用(或记忆)首趟的n-1次比较所得信息,从而尽量减少后续比较次数呢? 答:能! 堆排序思想 插入排序的基本思想是: 插入排序有多种具体实现算法: 1)线性 (直接)插入排序 2) 折半插入排序 每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入为止。 简言之,边插入边排序,保证子序列中随时都是排好序的。 新元素插入到哪里? 例1:关键字序列T=(13,6,3,31,9,27,5,11), 请写出直接插入排序的中间过程序列。 【13】, 6, 3, 31, 9, 27, 5, 11 【6, 13】,

文档评论(0)

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

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

1亿VIP精品文档

相关文档