The-Design-and-Analysis-of-Algorithms 作业3

1. 问题

写出两种检索算法:在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.

2.解析

顺序查找:顺序查找是一种最简单和最基本的方法,从顺序表的一端开始,依次将每个元素的关键字同给定值 x 进行比较,直到相等或比较完毕还未找到则结束程序。
二分查找:首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

3. 设计

顺序查找
for(i=1;i<=n;i++)
if x == a[i] then output i and break the loop;
if i==n+1 then output 0;
二分查找
Binary_Search(first, last)
IF (first > last) THEN
RETURN false
ELSE
set middle to (first + middle) / 2
set result to item.compareto(middle)
IF (result = 0) THEN
RETURN true
ELSE
IF (result < 0) THEN
Binary_Search(first, middle)
ELSE
Binary_Sreach(middle, last)

4.分析

顺序查找:O(n)
二分查找:O(log2n)

5. 源码

顺序查找
https://github.com/LiChunning/The-Design-and-Analysis-of-Algorithms/blob/main/%E9%A1%BA%E5%BA%8F%E6%9F%A5%E6%89%BE.cpp
二分查找
https://github.com/LiChunning/The-Design-and-Analysis-of-Algorithms/blob/main/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.cpp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值