高考专题复习专题八 查找算法的程序实现

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

专题八查找算法的程序实现【考纲标准】

考试内容考试要求

查找算法的程序实现:

①顺序查找

②对分查找

C

1.(2018·11月浙江选考)数组a中存储的是左右交替上升的n个正整数,如下表所示:

a(1) a(2) a(3) ……a(n-2) a(n-1) a(n)

3 25 38 ……55 31 12

依据对分查找思想,设计一个在数组a中查找数据key的程序。实现该功能的VB程序如下,但加框处代码有错,请改正。

End If

End Sub

解析本题考核对分查找的思想,算法比较简单,关键是对数组a中存储的是左右交替上升的n个正整数的理解,数组的前半部分是递增的,后半部分是递减的,且他们的大小变化规律是3→12→25→31→38→55。因此如果在前半部分找不到,还可能在右半部分对称的位置找到。因此(1)应修改为i<=j,也就是说最后

一次查找,变量i=j=m。如果在前半部分找不到,该数可能比a(m)小,此时j =m-1,该数大于(j)但小于a(m),在与j对称的位置(即n-j+1)可能是要找的数;该数可能比a(m)大,此时i=m+1,该数大于a(m)但小于a(i),在与(i-1)对称的位置(即n-(i-1)+1)可能是要找的数。

答案(1)i<=j(2)n-i+2或n-j+1或n+1-(i+j)

2.(2018·11月浙江选考)数组a为一组正整数,奇数在前,偶数在后。奇数与偶数已分别按升序排序。依据对分查找思想:设计一个在数组a中查找数据Key 的程序。实现该功能的VB程序段如下:

i =1: j =10

Key =Val(Text1.Text)

Do While i <=j

m =(i +j) \2

If a(m) =Key Then Exit Do ′Exit Do表示退出循环

If Key Mod 2 =1 And a(m) Mod 2 =0 Then

(1)

ElseIf Key Mod 2 =0 And a(m) Mod 2 =1 Then

(2)

Else

(3)

End If

Loop

If i > j Then s =“没有找到!” Else s =“位置:”+Str(m)

Text2.Text =s

上述程序中方框处可选语句为:

①i =m +1

②j =m -1

③If Key < a(m) Then j =m - 1 Else i =m + 1

则(1)、(2)、(3)处语句依次是()

A.①、②、③B.①、③、②

C.②、①、③D.③、②、①

解析本题考核对分查找算法。语句Key Mod 2 = 1 And a(m) Mod 2 =0表示要查找的key是奇数,且m指向的数是偶数。奇数在前,向前找,移动尾指针。语句Key Mod 2 =0 And a(m) Mod 2 =1表示要查找的key是偶数,且m指向的数是奇数。

答案 C

3.(2017·11月浙江选考)某算法的VB程序段如下:

i=1:j=7:s=””

Key=Int(Rnd*100)

Do While i<=j

m=(i+j)\2

If Key=a(m) Then

s=s+”M”:Exit Do′Exit Do表示退出循环

ElseIf Key

j=m-1:s=s+”L”

Else

i=m+1:s=s+”R”

End If

Loop

Text1.Text=s

数组元素a(1)到a(7)的值依次为“24,35,38,41,45,69,78”。执行该程序段后,文本框Text1中显示内容可能的是()

A.RL B.LMR C.RLR D.LRLM

解析找到的情况下,显示M并停止查找,因此B选项是不可能的。7个数据,在找不到的情况下,至少查找的次数是Int(Log27)+1=3,因此A选项还需继续

查找。D选项的查找次数超过了3次。第一次找到41,向右找,找到69,向左找,找到45,再向右找,没有找到,该数在(45,69)之间。

答案 C

一、顺序查找

1.查找是一种查询数据的技术,其目标是能以比较少的步骤或较短的时间找到所需的对象。

2.顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从第一个开始逐个比较,直到找出与给定关键字相同的数为止。

3.由于该部分在前面的几个专题均有练习,本专题不做专题讲述。

二、对分查找

(一)基本算法思想

在一个升序或降序的数组中,确定该数组的开始位置i、结束位置j和中间位置m,用待查找的数key与m位置所在的值d(m)比较,如果相等,表示找到了,如果在前半段,把结束位置j修改为m-1,重新查找,如果在后半段,把开始位置i修改为m+1,再次查找,直到找到或者开始位置大于结束位置为止。

中间位置m的计算公式:m=Int((i+j)/2)或者m=(i+j)\ 2或者m=fix((i+j)/2)。

(二)核心代码

1.在升序的数列d(1)至d(n)中查找key。用i表示开始位置下标,用j表示结束位置下标,m表示中间位置下标。若找到,输出该数据所在位置pos.如果pos=0表示没有找到。

pos =0: c =0: i =1: j =n

Do While i<=j′进入查找的条件,i与j的关系

m =Int((i+j)/2)

c = c + 1 ′表示查找次数

If d(m) =Key Then

pos =m′找到,用xb记录下标位置

相关文档
最新文档