第11章 查找及排序.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文档。上传文档
查看更多
本章内容 查找 排序 查找的基本概念 查找:在数据元素集合(查找表)中查找关键字与给定值相等的数据元素。 关键字:数据元素中的一个或多个数据项值,它可以惟一标识一个数据元素。 平均查找长度(ASL): 顺序查找 要求: 查找表必须采用线性表。 基本思想:用给定值依次与线性表中每个元素的关键字进行比较。如果某个元素的关键字与给定值相同,则查找成功;如果找遍全表也没有发现满足条件的元素,则查找失败。 #include iostream #include iomanip using namespace std; #include iostream.h int find(int list[],int size,int item ) { for( int i = 0; i size; i++ ) if ( item == list[i] ) return i+1; return -1; } int main(){ int n; cinn; int *a=new int[n] , i; for(int j=0;jn;j++){ a[j]=rand()%100; coutsetw(5)a[j]; if((j+1)%10==0) coutendl; } coutendl; i =find(a , n ,100); if( i == -1 ) cout 没找到!\n; else cout i endl; return 0; } 顺序查找的平均查找长度 评价:在用顺序查找方法完成查找时,每进行一次成功查找需要的平均比较次数约为表长度的一半,因此,它的效率较低。适用于在查找表较小的情况下进行查找。 二分查找 要求: 查找表必须采用线性表 必须以顺序方式存储线性表 线性表中所有数据元素必须按照关键字有序排列 基本思想:将给定值与处于顺序表“中间位置”上的元素的关键字进行比较,若相等则查找成功;若给定值大于关键字则在表的后半部分继续进行二分查找,否则在表的前半部分继续进行二分查找。如此进行下去直至找到满足条件的元素,或当前查找区为空,此时查找失败。 1.设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值。 2.初始时, 令 low = 0,high = n - 1,mid= ?(low+high)/2? 让 k 与 mid 指向的记录比较 若 k == r[mid] ,查找成功 若 k r[mid] ,则high = mid - 1 若 k r[mid] ,则low = mid + 1 3.重复上述操作,直至low high时,查找失败。 二分查找算法实现 二分查找优缺点 优点: 查找效率高 平均查找长度 缺点: 查找前要将表中元素按关键字有序排列 只适用于线性表的顺序存储。适用于那种一经建立就很少改动而又经常需要查找的线性表。 二叉排序树查找 二叉排序树的定义: 二叉排序树或者是一棵空二叉树,或者 是具有以下性质的二叉树: 若它的左子树非空,则左子树上所有结点的值均小于根结点的值; 若它的右子树非空,则右子树上所有结点的值均不小于根结点的值; 左、右子树本身又各是一棵二叉排序树。 哈希查找 哈希存储(哈希表): 以数据元素的关键字k为自变量,通过一定的函数关系计算出对应的函数值h(k),把这个值解释为数据元素的存储地址并把数据元素存储到相应的存储单元内。h(k)称为哈希地址。 例:设有一组关键字值{85, 72, 49, 58, 15, 70, 90, 38}, 哈希函数 h(k) = k mod 12。则对应的哈希地址为 {1, 0, 1, 10, 3, 10, 6, 2} 冲突: 若有两个不同的关键字ki和kj,即ki ≠ kj(i ≠j)。 但h(ki) = h(kj),这种情况称为冲突。如上例的关键字85和49,其对应的哈希地址都为1,即产生冲突。 哈希函数的构造方法 构造哈希函数要考虑以下几点 哈希函数的定义域必须包括要存储的数据元素的全部关键字; 而如果散列表允许有 m 个地址,则哈希函数的值域必须在 0 到 m-1 之间 由哈希函数计算出的地址应均匀分布在散列地址空间内 哈希函数应该是简单的,能在较短时间内计算出结果 常用哈希函数 直接定位法 取关键字的某个线性函数作为哈希函数,即 h(k) = ak+b。其中,k为关键字,a、b为常数。 数学分析法 当关键字的位数比存储

文档评论(0)

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

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

1亿VIP精品文档

相关文档