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

第11章 查找与排序综述.ppt

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

第十一章 查找和排序;本章内容;查找的基本概念;顺序查找 ;? 实现一:顺序表类中实现顺序查找的成员函数;? 实现二:单链表类中实现顺序查找的成员函数;顺序查找的平均查找长度 评价:在用顺序查找方法完成查找时,每进行一次成功查找需要的平均比较次数约为表长度的一半,因此,它的效率较低。适用于在查找表较小的情况下进行查找。 ;二分查找(折半查找);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时,查找失败。;二分查找过程;low;例key = 70 的查找过程;5 13 19 21 37 56 64 75 80 88 92;例:二分查找函数模板及其测试程序;例:用递归方法实现二分查找函数模板;二分查找;二分查找优缺点;搜索算法的效率;N和log2N的值;二叉排序树查找;二叉排序树;50;? 插入操作:;? 设有整数序列{47,23,56,15,26,89},将其中的值依次插入二叉排序树;? 删除操作:; 情况三:被删除的结点有两棵非空的子树;50;? 查找操作:;在二叉排序树中查找关键字值等于50,35,90,95;? 二叉排序树的蜕变:;哈希查找;哈希表;哈希存储(哈希表) ;? 采用哈希技术要解决的两个主要问题:;哈希表; 解决冲突的方法:开放地址法和链地址法;设哈希表的长度11,哈希函数是h(k) = k % 11,将整数序列{54,77,94,89,14,45,76}存入哈希表。按线性探查法处理冲突;设哈希表的长度11,哈希函数是h(k) = k % 11,将整数序列{54,77,94,89,14,45,76}存入哈希表。按平方探查法处理冲突;将所有哈希地址相同的记录都链接在同一单链表中。 哈希表中的每个存储单元中不再存放数据元素而是存放相应单链表的头指针. 例:给定关键字{19, 1, 23, 14, 55, 68, 11, 82, 36} 哈希函数为 H(key) = key % 7 ;例:给定关键字{ 19, 1, 23, 14, 55, 68, 11, 82, 36 } 哈希函数为 H(key) = key % 7 ;哈希查找;排序的基本概念 ;插入排序;直接插入排序;直接插入排序 ; 16;例:;? 直接插入排序的函数模板示例:;算法分析;二分插入排序;? 二分插入排序的函数模板示例:;选择排序 ;直接选择排序;直接选择排序 ;直接选择排序 ;未排序;?直接选择排序函数模板:;冒泡排序;冒泡排序(交换排序);冒泡排序;#include iostream.h void main(){ int a[10]; for(int i= 0 ; i 10 ; i ++) cin a[i]; int temp; for(i = 0 ; i 10; i++) for(int j = 0 ; j 10 - i - 1; j++) if(a[j] a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1]= temp; } };#include iostream.h void main(){ int a[10]; for(int i = 0; i 10 ; i++) cin a[i]; bool change = true; int temp; for(i = 0 ; i 10 change ; i++){ change = false; //标志置为假,假设未交换 for(int j = 0 ; j 10 – i – 1 ; j++) if(a[j] a[j+1]) { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; change = true; //标志置为真,有交换 } } };算法分析;97;27;第三趟排序结束; 冒泡排序函数模板:;快速排序;71;void main(){ int a[]={45,90,37,60,87,

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档