排序 排序的基本概念排中序算法的分析插入排序(直接,二分)交换排序(冒泡,快速)选择(selection,堆排序)归并(merge)基数排序.pptVIP

  • 0
  • 0
  • 约3.39千字
  • 约 36页
  • 2019-01-11 发布于福建
  • 举报

排序 排序的基本概念排中序算法的分析插入排序(直接,二分)交换排序(冒泡,快速)选择(selection,堆排序)归并(merge)基数排序.ppt

排序 排序的基本概念排中序算法的分析插入排序(直接,二分)交换排序(冒泡,快速)选择(selection,堆排序)归并(merge)基数排序

排序 排序的基本概念 排序算法的分析 插入排序(直接,二分) 交换排序(冒泡,快速) 选择(selection,堆排序) 归并(merge) 基数排序 排序算法选择 待排序的个数 记录本身的大小 关键字的分布 排序稳定性的要求 第8章 查找searching 查找 也叫检索,是根据给定的某个值,在表中确定一个关键字等于给定值的记录或数据元素 关键字,是数据元素中某个数据项的值,它可以标识一个数据元素 查找方法评价 查找速度 占用存储空间多少 算法本身复杂程度 平均查找长度ASL(Average Search Length): 为确定记录在表中的位置,需将关键字和给定值进行比较的平均次数 主要方法 顺序查找 二分查找 分块查找 哈希查找 顺序查找 查找过程:从表的一端开始逐个进行记录的关键字和给定值的比较?? 顺序查找方法的ASL 二分查找 查找过程:每次将待查记录所在区间缩小一半 适用条件:采用顺序存储结构的有序表 算法实现 ??设表长为n,low、high和mid分别指向待查元素所在区间的上界、下界和中点,k为给定值 初始时,令low=1,high=n,mid=?(low+high)/2? 让k与mid指向的记录比较 若k==r[mid].key,查找成功 若kr[mid].key,则high=mid-1 若kr[mid].key,则low=mid+1 重复上述操作,直至lowhigh时,查找失败 intbinsrch(JDr[ ],int n,intk ) { int low,high,mid; low=1; high=n; while(low=high) { mid=(low+high)/2; if(k==r[mid].key) return(mid); if(kr[mid].key) low=mid+1; else high=mid-1;} return(-1);} 算法评价 判定树:描述查找过程的二叉树?? 有n个结点的判定树的深度为[log2n]+1 折半查找法在查找过程中进行的比较次数最多不超过其判定树的深度?? 折半查找的ASL 分块查找 查找过程:将表分成几块,块内无序,块间有序;先确定待查记录所在块,再在块内查找 适用条件:分块有序表 算法实现 用数组存放待查记录,每个数据元素至少含有关键字域 建立索引表,每个索引表结点含有最大关键字域和指向本块第一个结点的指针 算法描述 查找方法比较 哈希查找 基本思想 在记录的存储地址和它的关键字之间建立一个确定的对应关系;这样,不经过比较,一次存取就能得到所查元素的查找方法 哈希函数——在记录的关键字与记录的存储地址之间建立的一种对应关系 哈希函数是一种映象,是从关键字空间到存储地址空间的一种映象 哈希函数可写成:addr(ai)=H(ki) ai是表中的一个元素 addr(ai)是ai的存储地址 ki是ai的关键字 哈希表 应用哈希函数,由记录的关键字确定记录在表中的地址,并将记录放入此地址 哈希查找 又叫散列查找,利用哈希函数进行查找的过程 哈希函数只是一种映象,所以哈希函数的设定很灵活,只要使任何关键字的哈希函数值都落在表长允许的范围之内即可 冲突:key1≠key2,但H(key1)=H(key2)的现象叫~ 同义词:具有相同函数值的两个关键字,叫该哈希函数的~ 哈希函数通常是一种压缩映象,所以冲突不可避免,只能尽量减少;同时,冲突发生后,应该有处理冲突的方法 哈希函数的构造方法 直接定址法?? 构造:取关键字或关键字的某个线性函数作哈希地址,即H(key)=key 或H(key)=a·key+b?? 特点?? 直接定址法所得地址集合与关键字集合大小相等,不会发生冲突?? 实际中能用这种哈希函数的情况很少?? 数字分析法?? 构造:对关键字进行分析,取关键字的若干位或其组合作哈希地址?? 适于关键字位数比哈希地址位数大,且可能出现的关键字事先知道的情况 平方取中法?? 构造:取关键字平方后中间几位作哈希地址?? 适于不知道全部关键字情况通常, 要预先估计关键字的数字分布并不容易,要找数字均匀分布的位数则更难。 一组关键字(0100, 0110, 1010, 1001, 0111) 就无法使用数字选择法得到较均匀的散列函数。此时可采用平方取中法,即先通过求关键字的平方值扩大差别,然后再取中间的几位或其组合作为散列地址。例如,上述一组关键字的平方结果是:(0010000,0012100,1020100,1002001,0012321)若表长为1000,则可取中间三位作为散列地址集。 折叠法?? 构造:将关键字分割成位数相同的几部分,然后取这几部分的叠

文档评论(0)

1亿VIP精品文档

相关文档