2.3 查与排序.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.3 查找与排序 主讲教师:黄兰秋 Hlanqiu@163.com 2.3.1 查找 关键字:是数据元素中可以唯一标识一个数据元素的数据项,比如学号、身份证号等, 查找:是根据给定的关键值,在一组数据中确定一个其关键字等于给定值的数据元素的过程. 查找的确切定义 给定一个值K,在含有n个记录的文件中进行搜索,寻找一个其关键字等于给定的K值的记录,如找到,则输出记录或记录在文件中的相对位置称查找成功;否则输出查找不成功的信息称查找失败。 被查找的数据本身是否有序影响算法的优劣,目前主要有四类查找: 顺序地查找无序的数据对象 顺序地查找有序的数据对象 非顺序地查找有序的数据对象 非顺序地查找无序的数据对象 1.顺序查找 顺序查找的方法是:用待查关键字值与线性表中各结点的关键字值逐个比较,直到找出相等的关键字值;或找遍所有结点都找不到,即查找失败 优点:对线性表结点的逻辑次序无要求,对线性表的存储结构无要求 缺点:平均检索长度长,为n/2 无序表:只能顺序查找 有序表:采用链式存储结构,只能顺序查找 2、非顺序查找有序的数据对象 利用有序数据的特点,典型算法如二分查找法。 要求线性表结点按关键字码值排好,且以顺序方式存储 算法:用要查找的码值X与中间位置结点的关键码值W相比较: (1)X=W,此时已经查找成功,查找结束。 (2)XW,表明X在表的后半部分,取后半部分进行查找 (3)XW,表明X在表的前半部分,取前半部分进行查找 二分法查找的优点是平均检索长度小,为log2n 分块查找 要求:文件中记录关键字“分块有序”,即前一块中最大关键字小于后一块中最小关键字,而块内的关键字不一定有序 基本思想 :先抽取各块中的最大关键字构成一个索引表,由于文件中的记录按关键字分块有序,则索引表呈递增有序状态。 查找分两步进行:第一步先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块,第二步在已限定的那一块中进行顺序查找 用分块查找的文件不一定分成大小相等的若干块,块大小及其分法可根据文件的特征来定。分块查找不仅适用于顺序方式存储的顺序表,也适用于线性链表方式存储的文件 3、非顺序查找无序的数据对象 典型:哈希文件查找,记录在表中位置和其关键字之间存在一种确定的关系。 建立一个函数关系,以f(key)作为关键字为key的记录在表中的位置,通常称这个函数f(key)为哈希函数。 注意:这个函数并不一定是数学函数 哈希函数的构造方法:对数字的关键字可有下列哈希函数的构造方法,若是非数字关键字,则需先对其进行数字化处理。 采用何种构造哈希函数的方法取决于建表的关键字集合的情况(包括关键字的范围和形态),总的原则是使产生冲突的可能性降到尽可能地小。 1)直接定址法: 哈希函数为关键字的线性函数 H(key) = key 或者 H(key) = a ? key + b 仅限于:地址集合的大小 = 关键字集合的大小 2)数字分析法 假设关键字集合中的每个关键字都是由s位数字组成(k1, k2, …, kn),分析关键字集中的全体,并从中提取分布均匀的若干位或它们的组合作为地址。 仅限于:能预先估计出全体关键字的每一位上各种数字出现的频度。 3)平方取中法 若关键字的每一位都有某些数字重复出现频度很高的现象,则先求关键字的平方值,以通过“平方”扩大差别,同时平方值的中间几位受到整个关键字中各位的影响? 4) 折叠法 若关键字的位数特别多,则可将其分割成几部分,然后取它们的叠加和为哈希地址。可有:移位叠加和间界叠加两种处理方法。 5) 除留余数法 H(key) = key MOD p p≤m (表长) 关键问题是:如何选取 p ? p 应为不大于m 的质数或是不含20以下的质因子 例如:key = 12, 39, 18, 24, 33, 21 时, 若取 p=9, 则使所有含质因子3的关键字均映射到地址0, 3, 6 上,从而增加了“冲突”的可能性。? 6) 随机数法 H(key) = Random(key) 2.3.2 内部排序 一、概述 二、插入排序 1 直接插入排序 2 shell排序 三、 交换排序 1 冒泡排序 2 快速排序 四、 选择排序 1 简单选择排序 2 堆排序 五、归并排序 六、基数排序 七、各种排序方法的比较讨论 一、内部排序概述 排序(Sorting): 将数据元素(或记录)的一个任意序列,重新排列成一个按关键字有序的序列。 排序方法的稳定性: 对关键字相同的数据元素,排序前后它们的领先关系保持不变,则称该排序方法是稳定的。反之,称该排序方法是不稳定的。 内部排序 待排序

文档评论(0)

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

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

1亿VIP精品文档

相关文档