软件技术基础11.pptx
《软件技术基础11.pptx》由会员分享,可在线阅读,更多相关《软件技术基础11.pptx(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第五章 检索检索的基本方法第1页/共52页检索5.1检索检索是依据元素的关键字,在结构中找寻元素的方法关键字:元素的标志,检索的依据一般情况下,关键字是一个元素的唯一标识第2页/共52页检索检索的方法与数据结构的关系数据结构决定了检索的方法有时为提高检索效率,需要对数据结构采用特殊的实现方式例,按成绩检索学生,检索一个学生成绩递增的表格比杂乱的表格效率高检索效率的一般评价依据:比较次数最多、最少和平均比较次数第3页/共52页检索 顺序检索5.1 顺序检索 顺序查找从头开始逐个检索直到找到需要的结点i=0;while(i length)if(table-ai.key=our_key)break;
2、i=i+1;找到所需的结点if(i length)return i;elseerror(“no such item”);平均查找次数=PiCii=1n=n+12第4页/共52页检索 二分检索5.2 折半(二分)检索方法描述:元素按关键字大小排列,每次查询查找范围内的“中间位置”结点。若该结点不是所需,则缩小查找范围为前半部分或后半部分mm=length/2(要求元素按关键字大小排列)ai.key am.keyai.key am.keyaj.key am.key第5页/共52页检索 二分检索算法框架每次将检索范围缩小一半,直到范围中结点的个数为0whilewhile(L=hL amid.key
3、amid.key )L=m+1L=m+1;else if(amid.key datamid.key=key)if(table-datamid.key=key)break;break;else if(key table-data mid.key)else if(key table-data mid.key)elseelse 检索 二分检索int binary_search(key,table)int binary_search(key,table)L=0;L=0;h=table-length 1;h=table-length 1;while()while()return mid;return m
4、id;L=hL=hh=mid 1;h=mid 1;L=mid+1;L=mid+1;if(L =h)if(L =h)elseelsereturn 1;return 1;L Lh h第8页/共52页平均查找次数检索 二分检索n1(1+2 2+4 3+.+2k (log 2n+1)log2(n+1)-19 97 75 51 11616181810101 1层层2 2层层3 3层层第9页/共52页检索 二分检索无序的线性表必须 才能使用二分检索 数组实现的顺序表 用二分检索单链表 用二分检索排序二叉树 用二分查找排序排序不适合不适合适合适合适合适合9 97 75 51 11616181810101 1
5、层层2 2层层3 3层层第10页/共52页检索顺序检索与二分检索在检索有序线性表时,顺序检索效率较低对于无序线性表,二分检索要求必须对无序线性表先进行排序第11页/共52页检索 分块检索5.3 分块检索将检索对象分块,块内无序,块间有序。块内使用较低效的顺序查找块间通过排序可使用较高效的查找方法可做出块的索引表,进一步针对块索引表进行折半检索306586x=3030 x=6565 x dataindex);p=&(table-dataindex);while(p!=NULL&p-key!=key)while(p!=NULL&p-key!=key)p=p-next;p=p-next;.第16页/
6、共52页检索 哈希检索5.4.4 线性探查法使用数组存储方式存放时,如果hash结果冲突,将新的表项放在下一个空闲的存储单元检索时当发现当前hash地址里存放的不是需要的元素,就从下一个存储单元开始逐个探查。线性探查index=hash(key);index=hash(key);while(table-data index !=empty)while(table-data index !=empty)index+index+;index=hash(key);index=hash(key);while(table-dataindex-key!=key)while(table-dataindex-
7、key!=key)index+;index+;第17页/共52页例 关键字模6的hash运算以关键字分别为6,10,12,18,11,13的顺序存放元素。查找关键字为12,18,13的元素检索 哈希检索0 01 12 23 34 45 5index=hash(key);index=hash(key);while(table-data index !=empty)while(table-data index !=empty)index+index+;index=hash(key);index=hash(key);while(table-dataindex-key!=key)while(table
8、-dataindex-key!=key)index+;index+;6 612121818131310101111第18页/共52页检索 哈希检索5.4.5 开放地址法Hi(k)(H(K)di)mod mi:第i个冲突的元素i 1 to n(1)di 1,2,3,(2)di 12,12,22,22(3)di 伪随机序列目的:使冲突分散线性探测线性探测二次探测二次探测随机再散列随机再散列第19页/共52页排序的基本方法第六章 排序第20页/共52页排序6.1 排序将一组元素按照它们的排序码的大小,递增或递减排列的运算排序码:一般是元素的关键字,但也可以不是关键字,不同元素排序码可以相同排序的方法
9、与数据结构的关系数据结构及其实现方式,将影响排序过程中元素比较时的方便性,和元素位置调整(搬移元素)的方便性如:链表对元素位置调整带来很大方便第21页/共52页排序排序算法一般的评价依据平均的比较次数(完成一次排序所需的元素间排序码的比较次数)元素搬移的次数算法的稳定性:对相同排序码的元素之间相对位置的维持保持相对位置不变稳定算法不一定保持相对位置不稳定算法1212,1010,1111,1010,15151010,1010,1111,1212,15151010,1010,1111,1212,1515第22页/共52页排序 简单插入6.2 线性插入算法 简单插入算法基本思想:从表取一个元素,按照
10、排序关系插入到新的排序表中。若直接在原表中进行:将表分为已排序子表和未排序子表。每次从未排序子表中取出表头元素按排序关系插入到已排序子表中,当未排序子表为空时,排序完成。3 31 14 42 2已排序子表已排序子表未排序子表未排序子表教材及教案中所有的排序算法都是按递教材及教案中所有的排序算法都是按递增顺序排序增顺序排序注注意意第23页/共52页排序 简单插入算法分析算法框架逐个从未排序子表中取出元素,插入排序子表的算法框架。即未排序子表不断减小,已排序子表不断增加的算法框架。tailtail1 13 36 67 7171745452 2whilewhile(tail length)tail
11、length)核心算法:将核心算法:将tailtail所指的元素按序插入到前面已排序的子表中所指的元素按序插入到前面已排序的子表中 tail+;tail+;tail=1;tail=1;tailtail是两个子表的分界线是两个子表的分界线第24页/共52页排序 简单插入核心算法按序插入的算法从已排序子表的后部逐个向前比对,如果插入元素大于表中元素,就将表中元素后移一格,否则在表中元素后放入while(j -1)while(j -1)if(temp.key dataj.key)if(temp.key dataj.key)table-dataj+1=table-dataj;table-dataj+1
12、=table-dataj;elseelsetable-dataj+1=temp;table-dataj+1=temp;break;break;j-;j-;1 12 26 67 710106 61717temptemp第25页/共52页void insert_sort(table)void insert_sort(table)tail=1;tail=1;while(tail length)while(tail length)tail=tail+1;tail=tail+1;temp=table-datatail;temp=table-datatail;j=tail-1;j=tail-1;while
13、(j -1)while(j -1)if(temp.key table-dataj.key)if(temp.key table-dataj.key)table-dataj+1=table-dataj;table-dataj+1=table-dataj;elseelsetable-dataj+1=temp;table-dataj+1=temp;break;break;j-;j-;接近接近n(n+1)/4n(n+1)/4次搬移元素次搬移元素排序 简单插入第26页/共52页排序 简单选择6.3 选择插入排序算法 简单选择算法基本思想:从无序表中依次选择出最小的元素,插入在新的排序表尾若直接在原有的表中
14、进行排序!将表分为已排序子表和未排序子表。每次从未排序子表中选出最小的元素,与未排序子表的表首元素交换,同时未排序子表表首成为排序子表表尾,当未排序子表为空时,排序完成。3 31 14 42 2已排序子表已排序子表未排序子表未排序子表第27页/共52页排序 简单选择算法分析算法框架未排序子表不断减小,已排序子表不断增大的算法框架whilewhile(head length)head length)核心算法:每次从未排序子表选出最小的元素,与核心算法:每次从未排序子表选出最小的元素,与headhead指向的元素指向的元素交交换换。head+;head+;head=0;head=0;headhea
15、d是两个子表的分界线是两个子表的分界线3 31 14 42 2headhead课堂练习:请参照前面的算法写出算法框架课堂练习:请参照前面的算法写出算法框架第28页/共52页排序 简单选择核心算法从未排序子表中选出最小的元素(逐个比较)最小的元素和未排序子表首元素交换3 31 14 42 2headheadj=head;j=head;whilewhile(j length)j length)j+;j+;min=j;min=j;if(table-data j.key datamin.key)if(table-data j.key datamin.key)min=j;min=j;table-data
16、headtable-dataheadtable-datamin;table-datamin;课堂练习:请写出选择最小元素的算法课堂练习:请写出选择最小元素的算法课堂练习:请写出元素交换的算法课堂练习:请写出元素交换的算法第29页/共52页void select_sort(table)void select_sort(table)head=0;head=0;while(head length)while(head length)head=head+1;head=head+1;j=head,min=j;j=head,min=j;while(j length)while(j length)if(ta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件技术 基础 11
限制150内