浙江高中信息技术对分查找算法公开课课件
高中信息技术选修1课件-2.4 查找2-浙教版
次 数3 2
31
3
2
34
d(1) d(2) d(3) d(4) d(5) d(6) d(7) d(8) d(9)
Key 10 15 17 18 22 27 35 45 48
次
数3 2
34
1
3
2
3
4
数组中每个数据的查找次数:
对分查找算法的最多查找次数 由于对分查找过程中的每次比较都能
使搜索范围减半,根据规律可以得出: [log2n]+1
玩一玩
猜价格:31——40
对分查找算法原理
(1)对分查找是效率很高的查找方法,但
前提是被查找的数据必须是有序的。 (2)首先将查找的数与有序数组内处于中 间位置的数据比较,如果中间位置上的数
与查找的数不同,根据有序性,就可确定
应该在数组的前半部分还是后半部分继
续查找。 (3)在新确定的范围内,继续按上述方法 进行查找,直到获得最终结果。
1
10
m
d(m)
找不到
5
22
第二次
1
4
2
15
第三次
3
4
3
17
第四次
4
4
4
18
第五次
5
4
总结规律
继续进行重复查找的条件? i<=j 根据i,j的初值,计算出中间位置m, 比较Key与d(m),相等则输出,否则确 定新i或新j,直到找到为止,这循样环结重构复 操作可以采用什么结构?
Do while i<=j
loop
对分查找流程图
开始
If语句格式
m (i+j)\2
Y im+1
浙教版高中信息技术高一《对分查找算法》课件
While l_o_w_<_=__h_ig_h
mid=(low+high)\2 ‘mid指向low和high中点 if d(mid)=key then print“找到了”: exit sub ‘找到了,退出sub if d(mid)<key then low=mid+1 ‘low指向中间后面的下标
有序
7 14 18 21 23 29 31 35 38
中间
为社会负责,为学生终身发展负责
一、对分查找的过程。
要找的数据与处于中间的数据比较 如果=,找到, 如果>中间的数,就在后一半找, 如果<中间的数,就在前一半找, 后面继续相同的策略,直到获取最终结果
为社会负责,为学生终身发展负责
二、合作探究:对例子进行剖析
整除运算符号:\,这样mid=(low+high)\2,舍去小数部分。
(2)查找商品价格key=19
为社会负责,为学生终身发展负责
三:拓展提升:完成对分查找程序(在网站上提交)
数组d(1 to 9)递增整型数组
Private Sub command1_Click() Low=1 ‘初始时下标low指向1 High=9 ‘初始时下标high指向9
If_d_(m__id__)>_k_e__y_then high=mid-1 ‘high指向中间前面的下标
Loop Print “没找到” ‘执行本语句,说明没有找到 End Sub
为社会负责Leabharlann 为学生终身发展负责四、大显身手:程序实现:对分查找算法完美解决CCTV《幸运52》 猜价格,需要填空,编译和运行。 (在网站上提交)
单击提交并编译 单击后如有语法错误 单击后如无语法错误
高中信息技术对分查找
B
D
C
C
B
C
C
a> d(m)
j- result+ 1 4
第二单元 查找算法
课时34 二分查找
1、二分查找的概念 二分查找是一种高效的查找方法。 二分查找的前提是,被查找的数据序列是有序的(升序或降序)。 基本思想:在有序的数列中,首先将要查找的数据与有序数列内处
于中间位置的数据进行比较,如果两者相等,则查找成功;否则就根据 数据的有序性,再确定该数据的范围应该在数列的前半部分还是后半部 分;在新确定的缩小范围内,继续按上述方法进行查找,直到找到要查 找的数据,即查找成功,如果要查找的数据不存在,即查找不成功。
2、二分查找的过程
若key为查找键,数组d存放n个已按升序排序的数据。在使用二分查找 时,把查找范围[i,j]的中间位置上的数据d(m)与查找键key进行比较,结果必 然是如下三种情况之一:
(1)若key<d((m,j)内不可能存在值为key的数据,必须在新的范 围(i,m-1)中继续查找;
(2)key=d(m),找到了需要的数据; (3)key>d(m),由与(1)相同的理由,必须在新的范围(m+1,j)中 继续查找。
这样,除了出现情况(2),在通过一次比较后,新的查找范围将不超过 上次查找范围的一半。中间位置数据d(m)的下标m的计算方法:m=(i+j)\2或 m=fix((i+j)/2)
高中信息技术浙教版:数据查找教学课件(共19张PPT)
⑤如果中值不是查找键,则判定下一个查找范围应该在左 半部分还是在右半部分。注意i和j的控制。
if f==True:
⑥输出查找结果:f=True,mid中存储的即为查找键
print("查找成功!下标为"+str(mid)) Key在数组 d中的位置,f=False表示查找键key在数
else:
组d中不存在。
对分查找——算法演示
d[3] 4 d[4] 5 d[5] 6
第3次查找:
范围为__d_[_3_]_~_d[_5_]_,i=____3____,
←i ←mid
j=__5___,mid=____(_3+_5_)_/_/_2_=4。 d[mid]=__d_[_4_]_=5____。
←j d[mid]_=_=___key=5?
←i 第2次查找: 范围为__d_[_0_]_~_d[_5_]_,i=_____0___,
←mid j=__5___,mid=____(_0+_5_)_/_/_2_=2。 d[mid]=__d_[_2_]_=_3___。
←j d[mid]_<____key=5?
:后续查找的范围应该是 _______d_[_3_]_~_d[_5_]_。
查找成功,结束查找。
对分查找——流程图描述
开始
i=0,j=12
i<=j Y
mid =(i+j)//2
Y
d[mid]=key?
N
N
查找成功
Y
d[mid]<ke y?
N
i=mid+1
j=mid-1
结束
查找失败
对分查找——程序实现
key=int(input());f=False;i=0 #所有数据(升序)存储在数组d中
排序算法--堆排序与对分查找课件-浙教版(2019)高中信息技术选修1
堆排序算法
排序算法
·图解堆排序算法(升序)
列表a: 40 38 65 97 76 13 27 49 10 索引: 0 1 2 3 4 5 6 7 8
i
40
7
38
65
9
97
76 13 27
49 10
7 40
列表a: 40 38 65 97 76 13 27 49 10 索引: 0 1 2 3 4 5 6 7 8
然后继续安排原先节点所在位置的前一个节点,重复比较+ 交换的过程,一直安排完所有元素。
注意: 构造堆结构时,真正构造堆结构会有元素移动的,一般是
从最后一个非叶子节点开始。
堆排序算法
·图解堆排序算法(升序)
列表a: 40 38 65 97 76 13 27 49 10 7 索引: 0 1 2 3 4 5 6 7 8 9
列表a: 40 38 65 97 76 13 27 49 10 7 索引: 0 1 2 3 4 5 6 7 8 9
堆排序算法
排序算法
·图解堆排序算法(升序)
②从最后一个元素开始,对列表进行构造堆结构。 规则: 当前元素节点和其左右孩子节点比较,若孩子节点比较大,
则把该节点和其孩子节点中最大的交换位置。若该节点交换后的 位置,还有孩子节点,则继续比较,直至完成堆结构。
①根节点元素与末尾元素进行交换
堆排序算法
排序算法
·图解堆排序算法(升序)
列表a: 7 索引: 0
76 65 49 40 13 27 38 10 97 123456789
7
76
65
49
40 13 27
38 10 97
②调整交换后的堆结构(调整根节点即可), 调整的元素个数减一。
2024新高考浙江版高中信息技术专题二 算法与程序基础知识点归纳讲解PPT
例1 下列有关算法的与程序的关系叙述中正确的是 ( ) A.算法是对程序的描述 B.算法决定程序 ,是程序设计的核心 C.算法是唯一的,程序可以多种 D.程序决定算法,是算法设计的核心 解析 程序是对算法的描述;解决一个问题可以有多种算法,一种算法可 以用多种语言编写程序;算法是程序设计的核心。
答案 B
6.顺序结构的程序实现 1)顺序结构的程序代码执行方式是自上而下、依次执行的。 2)在Python中,“#”后面的内容为注释,主要对代码说明,并不执行。 3)Python常见的内建函数
函数 print(x) input ([prompt]) int(object) float(object) abs(x) help() len(seq) str(x)
3)控制转移:根据数据或运算结果的特点进行不同的处理。 二、算法的描述 1.用自然语言描述算法 用自然语言描述算法通俗易懂,且不需要进行专门的学习和训练。但也 容易产生歧义,描述比较烦琐。 2.用流程图描述算法 1)特点:结构清晰、寓意明确。 2)流程图基本图形及其功能
图形
名称 开始/结束符
输入/输出 框 处理框
4.变量与赋值 1)变量:在程序运算过程中变量的值可以改变。为了能对变量进行访问 需要对变量进行命名。在Python中,变量名可以由字母、数字、下划线 组成,但不能以数字开头,而且字母区分大小写,同时不能使用保留字。 2)赋值运算符:“=”“-=”“+=”“*=”“/=”“%=”等。 5.字符串、列表和字典 1)字符串 ①字符串用单引号、双引号或三引号表示;②字符串是不可变对象;③通 过索引来访问字符串的字符;④通过切片操作可以获得字符串的一个子 串。
3-1 (2021浙教版期末考专项复习,5)设计流程图应该在计算机编程解决 问题的哪一步完成 ( ) A.抽象建模 B.设计算法 C.编写程序 D.调试运行程序 答案 B
高中信息技术选修1课件-2.4 查找1-浙教版
任务一
数组: d(1)
2
45正确
价格
d(2) d(3) d(4) d(5) d(6) d(7) d(8)
5 6 9 45 87 93 98
比较次 数
比较范 围
中间位
中间数
Key与d(m)的关系
i、j的变化
第一次 i= j= m= d(m )= 第二次 i= j= m= d(m)= 第三次 i= j= m= d(m)= 第四次 i= j= m= d(m)=
ben benson
d(5)
colin
d(6)
denny
d(7)
frank
i=1
j=7
比较次数 比较范围 中间位 中间数 Key与d(m)的关系
第一次 第二次 第三次 第四次
i= j= i= j= i= j= i= j=
m= d(m )= m= d(m)= m= d(m)= m= d(m)=
i、j的变化
对分查找的效率
Key
N个有序数,最快查找次数: 1 N个有序数,最慢查找次数: int(log2N)+1
任务三
Key
市图书馆共有1024*1024=1048576本书,书名按升序排序, 使用对分查找算法查找某本书,每次比较需要10毫秒的时间,无论是 否找到,最多需要多长时间就可以保证找到要找的书?使用顺序查找, 最多需要多长时间才能找到要找的书?顺序查找平均查找时间是多少?
1-1000都是同类 数据
他们顺序有关系吗?
从小到大排序
前提 条件
其它顺序可以吗?
升序或降序都可以
不是递增1的序列可以吗
比如:2、5、6、9、 45、87、93、98?
2018高中信息技术浙教版浙江参考课件:3-3 查找算法的
B
解析 答案
-12考点1 考点2
变式22016年浙江有4.6万考生参加高考,小张想查询自己的成绩, 高考成绩已按学籍号排序,假设从中取出一条记录并与待查项进行 比较所花的时间为6毫秒,则用对分查找法在考生信息中查到成绩 最多花费的时间是( ) A.28万毫秒 B.8万毫秒 C.96毫秒 D.80毫秒
第三章
查找算法的程序实现
-2-
知识条目 1.顺序查找 2.对分查找
考试要求 c c
考试属性 加试
-3考点1 考点2
考点 1
顺序查找
查找是一种能以比较少的步骤或较短的时间找到所需对象的一 种查询技术。常见的查找方法有顺序查找和对分查找。 顺序查找的基本思想:从第一个数据开始,按照数据的顺序逐个 将数据与给定的值进行比较,若某个数据与给定值相等,则查找成 功,找到所查数据的位置;反之,则查找不成功。顺序查找算法简单, 对数据表中的元素是否有序没有要求,N个元素的顺序查找过程中 数据比较的次数最多是N次。 顺序查找的程序结构: k=0(k用来保存与要查找数据key相等的元素的下标) 让 i 从 1 到 n 循环
关闭
数组b记录下标值,该下标记录的是元素在数组a中的位置。
关闭
B
解析 答案
-15考点1 考点2
例3在已排序的数组a(数据元素a(1)≤a(2)≤…≤a(n))中查找键 值为key的数,其对分查找的VB程序段如下: i=1∶j=n∶xb=0 Do While ① m=Fix((i+j)/2) If a(m)=key Then xb=m Exit Do ElseIf key<a(m) Then j=m-1 Else ②
-7考点1 考点2
画线处的语句是( ) A.a(i)>key B.a(i)<key C.a(i)=key D.a(i)<>key 解析:根据顺序查找的基本思想,依次将数组元素a(1)到a(8)跟查 找键值key比较,若相等,显示找到结果并退出循环,否则继续查找。 程序实现时,变量i用来表示第几次查找,而a(i)则是第i次查找时被 访问到的数组元素。如果某个数组元素a(i)的值等于key则将该数 组元素的下标值i显示在Text1文本框中,并通过Exit For来结束查找。 故画线处的条件表达式为“a某电视台有一档与观众互动的猜价格的节目,如出示一件1 000元以内的物品让观众进行竞猜。如果某件物品的价格为250元, 采用对分查找法,则此价格被猜中至少需要的次数是( ) A.1 B.2 C.3 D.4
54对分查找解区间和最优解-浙江省瑞安市上海新纪元高级中学高中信息技术浙教版选修1课件(共26张PPT)
瑞安市上海新纪元高级中学
学习内容
1. 对分查找最优解问题基本特征;
2.对分查找最优解问题常见题型;
3.对分查找最优解问题变例分析。
4.对分查找最优解问题综合应用。 阶段一:理解了基本代码结构,但不知还有其他变例; 阶段二:总结了几种变例模型,但只会死套公式解题; 阶段三:忘记了众多变例模型,但抓住内在逻辑关系。
Else
Label1.Caption = "未找到
End If
key = Val(Text2.Text)
L = 1: R = n + 1 Do While L < R
m = (L + R) \ 2
不可以,枚举 出现遗漏!
If a(m) >= key Then
R = m ‘能否写做R = m - 1?
End Sub
二.对分查找最优解问题的执行过程
已知长度为8的数组a:(10,20,30,30,30,40,50,60),查找 第一个不小于key的元素下标,若a(n)<key,则输出n+1。
三. 对分查找最优解问题基本模型一
已知数组a(1 to n)为非递减序列,输出第一个不小于 key的元素下标,若a(n)<key,则输出n+1。可推广到 求满足条件的最小值问题(解区间的最小值)。
Private Sub Command3_Click() key = Val(Text2.Text) L = 1: R = n Do While L <= R m = (L + R) \ 2 If a(m) >= key Then ‘m位于解区间,寻找更优解 R=m-1 Else ‘m位于非解区间,寻找最优解 L=m+1
数据查找——二分查找课件(共14张PPT)浙教版(2019)高中信息技术选修1
查找次数 搜索区间
第一次 第二次 第三次
d[0]~d[15] d[8]~d[15] d[8]~d[10]
中点
7 11 9
查找键与中点关系 i j
0 15
key>d[m]
8 15
key<d[m]
8 10
key=d[m]
二分查找程序实现 Key=55
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 15 17 18 22 27 35 45 48 52 65 67 72 85 97 98
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 15 17 18 22 27 35 45 48 52 65 67 72 85 97 98
二分查找程序实现
1 2 3 4 5 6 7 8 9 10 m=(i+j)//2
m =(i+j+1)//2
二分查找程序实现
1 2 3 4 5 6 7 8 9 10 m=(i+j)//2
每次d[m]与Key比较会确定下一次查找范围
d[m]<key
右半区间: i=m+1
d[m)]>key 左半区间: j=m-1
二分查找思想
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 10 15 17 18 22 27 35 45 48 52 65 67 72 85 97 98
查找次数 搜索区间
第一次 第二次 第三次 第四次
d[0]~d[15] d[8]~d[15] d[8]~d[10] d[10]~d[10]
中点
7 11 9 10
查找键与中点关系 i j
算法的概念及描述课件高中信息技术浙教版(2019)必修1(18张PPT)
输入a、b、c的值 if b**2-4*a*c>=0 :
(输出“该方程有实数根”) else:
(输出“该方程没有实数根”)
伪代码 接近 计算 机程序代码 的算法描述 方式,介于自 然语言和程 序设计语言 之间。
历年真题
7.关于算法流程图下面说法正确的是(D)
A、流程图必须包含一个判断框 B、流程图直观易懂,但是容易产生二义性 C、算法描述只能使用流程图 D、流程图中无须填写程序代码
的值为( C )
A.2 B.3 C.4 D.5
历年真题
6.某算法的流程图如图所示,依次输入x的值为3、2、1、-1后,该算法的输出结果
为( A )
A3 B4 C5 D6
伪代码描述算法
判断任意一个一元二次方程是否有实数根 1、输入a、b、c 2、如果b2-4ac>=0,输出“该方程有实数根”;否则,输出 “该方程没有实数根”
算法---程序的“灵魂”
广义上讲,算法是为了解决一类特定问题而采取的确定的、有限的步骤。 在计算机领域,算法作为一个精心设计的运算序列,描述了计算机如何将输入转换 为输出的过程。
算法的一般特征如下:
有输入:可以没有吗?
可以没有
有输出:算法必须要有吗? 必须要有
有穷性:写出所有的偶数 可行性:计算宇宙的面积
4.在《几何原本》一书中,“辗转相除法”可以求出任意两个正整数的最大公约 数,具体步骤如下: (1)输入两个正整数m和n (2)以m除以n,得到余数r (3)若r=0,则输出n的值,算法结束,否则执行步骤(4) (4)令m n,n r,并返回步骤(2)
√
历年真题
5.某算法的部分流程图如图2-1-6所示。执行这部分流程,若输入a的值为36,则输出c
浙教版信息技术选修1 2
查找——对分查找一、教学分析算法是计算机程序的灵魂。
《算法与程序设计》课程的教学目标,就是让学生体验算法的思想,了解算法在解决问题过程中的地位和作用。
对分查找是算法中一个基础的算法,也是选考中要求的重要算法之一。
学生之前已经学习了顺序查找,为本课时的学习奠定了查找算法的基本概念。
对分查找共2个课时,本课时是第1课时,通过本课时的学习,使学生掌握对分查找的基本原理,为第2课时对分查找的程序实现打下基础。
因此本课时是承上启下的关键课时。
二、教学目标1. 知识与技能:理解对分查找的概念和特点,通过分步解析和分析多种不同的查找键值获取对分查找的解题结构。
2. 过程与方法:通过自主探究实践,逐步归纳对分查找的基本思想和方法,剖析算法,为后续的程序实现奠定基础。
3. 情感态度与价值观:通过亲身体验,模拟对分查找的过程,感受对分查找的魅力,促进学生计算思维的形成。
三、教学重点和难点重点:1. 对分查找的原理。
通过游戏引入对分查找算法,使学生得到对分查找感性体验,能更清晰地理解对分查找的原理。
2. 对分查找范围的下标变化及中间值下标的变化。
借助动画全程模拟对分查找过程,使学生在亲身体验中理解对分查找的范围下标和中间值下标的变化过程。
难点:1. 对分查找的最多查找次数的计算。
通过引入二叉树帮助学生掌握最多查找次数的计算,借此突破本课难点。
四、教学过程1. 活动一:新课引入(1)教师展示“砸金蛋”游戏一:9个金蛋,每个金蛋藏有数字(数字随机无序),砸出幸运数字“25”,需要几次。
(2)教师展示“砸金蛋”游戏二:商家良心发现,把金蛋按数字从小到大排序,此时要砸出幸运数字“25”,又该如何砸,才能以最少砸蛋次数砸出。
(3)学生讨论回答。
(4)教师引导:这个游戏含有一个非常经典的算法,引出对分查找的概念。
2. 活动二:原理感知(1)学生利用“对分查找模拟”动画观看对分查找的全过程,并根据“学习任务单”上的任务一“看动画感知原理”的要求结合动画填写任务单中每次比较的范围、mid值以及key与d(min)的关系,从中了解对分查找的原理。
《对分查找算法》课件
哈希表查找算法原理
对分查找算法原理
哈希表查找算法优缺点
对分查找算法优缺点
哈希表查找算法与对分查找算法比较
PART SIX
排序:将待查找数组进行排序,提高查找效率
二分查找:在有序数组中,每次取中间元素进行比较,缩小查找范围
哈希表:利用哈希表存储关键字的映射关系,减少比较次数
索引:建立索引,快速定位到数组中的元素
时间复杂度分析结论:对分查找算法是一种高效、快速的查找算法
最坏情况下的时间复杂度:O(log n)
对分查找算法的空间复杂度分析
空间复杂度定义
空间复杂度计算方法
空间复杂度与其他算法的比较
对分查找算法在排序数组中的性能表现 * 平均时间复杂度为O(log n) * 最坏时间复杂度为O(n) * 最好时间复杂度为O(1)
汇报人:PPT
PPT,a click to unlimited possibilities
CONTENTS
PART ONE
PART TWO
适用场景:适用于有序数组的查找操作,尤其在数据量大且有序的情况下效率较高
时间复杂度:对分查找算法的时间复杂度为O(log n),其中n为数组长度
算法定义:对分查找算法是一种在有序数组中查找特定元素的搜索算法
适用场景:对分查找算法适用于有序数据集的查找,而二分查找算法则更适用于完全有序的数据集。
查找范围:对分查找算法的查找范围比二分查找算法更灵活,因为对分查找算法可以通过调整步长来控制查找范围。
查找过程:对分查找算法在查找过程中,每次将查找范围缩小一半,而二分查找算法也是每次将查找范围缩小一半。
查找效率:对分查找算法的查找效率比二分查找算法更高,因为对分查找算法可以在最坏情况下仍然保持线性查找效率。
高中信息技术选修1课件-5.4 查找算法的程序实现1-浙教版
j=m-1 Else
i=m+1 End If s = s + Str(a(m)) Loop
建树
第3题
key = Val(Text1.Text) i = 1: j = 10 Text2.Text = "" Do While i <= j m = Int((i + j) / 2 + 0.5) If key = a(m) Then Exit Do If key < a(m) Then j = m - 1 Else i = m + 1 Text2.Text = Text2.Text + Str(a(m)) Loop
i=m+1 End If s = s + Str(a(m)) Loop
二叉树的概念
在计算机科学中,二叉树是每个节点最多有两个 子树的树结构。 ➢ 根结点:最上面的结点 ➢ 叶子结点:没有子结点的结点 ➢ 二叉树的子树有左右之分
建树——对分查找模型
Key = Val(Text1.Text) i = 1: j = 10 : s = "" Do While i <= j m = (i + j) \ 2 If Key = a(m) Then
小结
二叉树:提供高效解决对分查找的一种新 方法,希望同学在今后学习中结合实际情 况灵活运用各种方法解决问题
j = m - 1: nx = nx - 1 Else
i = m + 1: nx = nx + 1 End If Loop Text1.Text = Str(nx) 已经数组元素a(1)到a(10)分别为“11,26,37,49,55,62,78,79,85,98”, 按照该程序执行后,Text1中的内容不可能的数字有( ) A.-4 B.-3 C.-2 D.-1 E.0 F.1 G.2 H.3 I.4
浙江高中信息技术对分查找算法公开课课件
写法二
Key = Val(Text2.Text) i=1 j = num Do While i <= j m = (i + j) \ 2 If d(M) = Key Then Label6.Caption = "在数组的 " + Str(M) + " 位置中" Exit Sub ElseIf d(M) < Key Then i=m+1 Else j=m-1 End If Loop Label6.Caption = "在数组中没有找到" + Str(Key)
16
J=16
数组d( ): Key=52
下标
元素
1 2 3
10 15 17
4
我们用变量 I和J记录所 要查找范围的起始和终止 位置
18
22 27 35 45
5 6 7 8 9 10
48
52 65 67 72
I=9
第2次比较: Key<d(m) 查找范围应该 变成d(9)~d(11)
11
12 13 14 15 16
i结束ynyn转化成程序privatesubcommand6click顺序查找keyvaltext2textfori1tonumifdikeythenlabel5caption在数组的stri位置中exitforendifnextifinum1thenlabel5caption在数组中没有找到strkeyendifendsub对分查找的基本思想对分查找的前提是数据已经有序以递增为例然后把待查找的数据与数组中间位置的数比较如果比中间位置的数大在数组的后半部分继续查找否则在数组的前半部分查找继续对分查找直到找到待查找的数在数组中的位置或数组已无法对分猜数游戏flash流程图1015171822273545485265677285979812345678910111213141516下标元素数组di
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n =1 ,解得 k 2
k= log 2 N
顺序查找与对分查找比较
是否需要 事先排序 平均查找次数
顺序查找
不需要
(n+1)/2 多 Log2n 少
对分查找
需要
Key = Val(Text2.Text) i=1 j = num Do While i <= j m = (i + j) \ 2 If d(M) = Key Then Label6.Caption = "在数组的 " + Str(M) + " 位置中" Exit Sub End If If d(M) < Key Then i=m+1 Else j=m-1 End If Loop Label6.Caption = "在数组中没有找到" + Str(Key)
写法二
Key = Val(Text2.Text) i=1 j = num Do While i <= j m = (i + j) \ 2 If d(M) = Key Then Label6.Caption = "在数组的 " + Str(M) + " 位置中" Exit Sub ElseIf d(M) < Key Then i=m+1 Else j=m-1 End If Loop Label6.Caption = "在数组中没有找到" + Str(Key)
12 13 14 15 16
在规模为n的数组变量d中进行对分查找的流程图
开始
I←1 ,j←n
i<=j? Y 计算中点m← (i+j)\2 d(m)=key? Y N Y D(m)<key? N i←m+1 j←m-1 结束 N
未找到,输出结果:0
找到,输出结果:m
代码分析command4的click过程
如果输入查找的元素值key=22
i=1 i=2 i=3 i=4 i=5
此时i等于5,超过数组中元素个数,找不到
顺序查找的流程图
开始
i 1
N
i<=n?
Y
d(i)=key?
N
Y
未找到,输出结果:0
找到,输出结果:i
i
i+1 结束
转化成程序
Private Sub Command6_Click() '顺序查找 Key = Val(Text2.Text)
输入查找的元素值key=32
d d d d
(1) (2) (3) (4) d d d d (1) (2) (3) (4)
27 36 32 18 27 36 32 18
i=1 i=2 i=3
从数组d的第1个元素d(1) 开始,依次判断各元素的 值是否与查找键key的值相 等。
此时d(i)=key,数组中的第3个位置
For i = 1 To num
If d(i) = Key Then Label5.Caption = "在数组的 " + Str(i) + " 位置中" Exit For End If
Next
If i = num + 1 Then Label5.Caption = "在数组中没有找到" + Str(Key) End If End Sub
比较
顺序查找是一种基本、简单的查找算法, 但查找的效率往往过低; 对分查找时每次都把查找范围缩小一半
对分查找算法数据次数较少,效率较高, 但它要求数组中的数据是有序的。
对分查找效率分析
假设查找k次,依次查找的区间长度为
n n n n , 2 , 3 …… k 1 2 2 2 2
,最坏情况下,找到最后,区间剩下为1,即
16
J=16
数组d( ): Key=52
下标
元素
1 2 3
10 15 17
4
我们用变量 I和J记录所 要查找范围的起始和终止 位置
18
22 27 35 45
5 6 7 8 9 10
48
52 65 67 72
I=9
第2次比较: Key<d(m) 查找范围应该 变成d(9)~d(11)
11
12 13 14 15 16
查找算法
顺序查找和对分查找
查找算法
查找是一种查询数据的技术,其目标是能以比较少 的步聚和较短的时间找到所需的对象
顺序查找的基本思想
是从第一个数据开始,按数据的顺序逐个 将数据与给定的值进行比较。若某个数据和给 定的值相等,则查找成功,找到所查数据的位 置;反之,查找不成功。
(flash流程图)
顺序查找
对分查找的基本思想
对分查找的前提是数据已经有序(以递增为例), 然后把待查找的数据与数组中间位置的数比较, 如果比中间位置的数大,在数组的后半部分继续 查找,否则在数组的前半部分查找,继续对分查 找,直到找到待查找的数在数组中的位置或数组 已无法对分
猜数游戏 Flash流程图
下标
元素
1
10 15 17
I=1
(1)过程:
2 3 4 5 6 7 8
我们用变量 I和J记录所 要查找范围的起始和终止 位置
18
22 27 35 45 48 52 65 67
Key=52 数组d(i ):
M=Int((i+j)/2)
=8
9
10 11 12 13 14 15
72
85 97 98
第1次比较: Key>d(m) 查找范围应该 变成d(9)~d(16)
M=Int((i+j)/2)
=12
85
元素
1 2
10 15 17
Key=52
3
4
5 6 7 8 9 10
18
22 27 35 45 48 52 65 67 72 85 97 98
第3次比较: Key=d(m) 找到了 I=9 M=Int((i+j)/2) J=11 =10
11