【数据结构】查找算法:二分查找、顺序查找

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

【数据结构】查找算法:二分查找、顺序查找

查找算法

查找算法是在存在的序列(list)中查找特定的目标(target),要求序列中每个记录必须与一个关键词(key)关联才能进行查找。

查找算法通常需要两个输入:

1、被查找的序列

2、要查找的关键词

查找算法的输出参数和返回值:

1、返回类型为 Error_code 的值用以表示是否查找成功

2、如果查找成功,返回success,输出参数position 定位到目标所在位置

3、如果查找失败,返回 not present,输出参数可能是未定义或不同于已有位置的任何值

顺序查找算法

顺序查找算法的思路很简单:从表的第一个元素开始一个一个向下查找,如果有和目标一致的元素,查找成功;如果到最后一个元素仍没有目标元素,则查找失败。

【实验说明】

题目:编写一个程序,对顺序表{3,6,2,10,1,8,5,7,4,9},采用顺序查找关键字5的过程。要求输出:

1)原顺序表;2)查找到关键字的位置;3)进行比较的次数。

1.首先要编写类表List。需要满足最基本的操作插入insert(),获取retrieve(),

以及得到大小size()。

2.我们观察题目要求,表中虽然存储的是简单的整数,但如果我们使用List对象显然无法记录比较次数,所以我们自己写一个类Key通过其内部int类型的数据成员来记录存于表中的值,并模仿int基本的逻辑操作,即编写重载逻辑运算符,同时增加一个静态数据成员comparisons用于记录其比较操作的次数。

3.准备工作做好之后开始编写顺序查找算法。算法的思路很简单,也较易实现,从表中第一个元素开始比较,发现目标则返回元素所在表中位置;若遍历之后没有目标,则查找失败,返回-1表示表中没有目标元素。

4.按题目要求编写最后的输出函数。

【相关代码】

函数 sequential_search

[cpp]view plaincopy

1.int sequential_search(const List &the_list,

2.const Key &target)

3./*Post: If an entry in the_list is equal to target, then

return the position

4. of this entry.

5. Otherwise return -1

6.*/

7.{

8.int position;

9.int s=the_list.size();

10.for(position=0;position

11.int data;

12. the_list.retrieve(position,data);

13.if(data==target){

14.return position;

15. }

16. }

17.return -1;

18.}

二分查找算法

二分查找前提是表是按递增或递减顺序的规范表。此次实验中我们使用的是递增表。

二分查找从表中间开始查找目标元素。如果找到一致元素,则查找成功。如果中

间元素比目标元素小,则仍用二分查找方法查找表的后半部分(表是递增排列的),反之中间元素比目标元素大,则查找表的前半部分。

【实验说明】

题目:编写一个程序,对有序表{1,2,3,4,5,6,7,8,9,10},采用二分查找关键字9的过程。要求输出:

1)原顺序表;2)查找到关键字的位置;3)进行比较的次数。

1.二分查找算法的前提是表必须是有序的,如题目中是递增方式排列的表。实现表的有序一方面是用户规范输入,另一方面我们也可以编写有序的类来方便用户的输入。

所以从List中派生类Oredered_list,重新编写函数Error_code insert(int position,const Record &data),使插入的位置不满足表的有序条件时,不能插入。

同时编写插入的重载函数Error_code insert(const Record &data),可以直接插入到合适的位置,方便用户输入。

2.仍使用题目1中的Key来表示目标

3.实现二分查找算法。通过书中的学习,我们直接使用添加相等判断的二分查找算法。即每次从表的中间元素开始比较,如果得到目标则返回元素所在表中位置;如果中间元素小于目标元素,则对右半部分继续二分查找;反之对前半部分表进行二分查找。若最后都没有目标元素,返回-1用以表示表中没有目标元素。

4.仍使用题目1编写的输出函数将结果输出。

/*注意这里因为Ordered_list是从List中派生而来,所以虽然print_out函数中第一个参数类型是List,仍可以使用,而不用编写重载函数*/

【相关代码】

函数 binary_search

[cpp]view plaincopy

1.int binary_search(const Ordered_list &the_list,

2.const Key &target)

3./*Post: If an entry in the_list is equal to target, then

return the position

4. of this entry.

5. Otherwise return -1

6.*/

7.{

8.int position;

9.int data;

相关文档
最新文档