实验3 两种检索算法

(1)问题

在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0.按实验模板编写,“分析”部分仅给出复杂度结果即可。

(2)解析

要查找排好序的数组中的一个数,返回下标可以用的查找的方法很多,这里采用顺序查找和二分查找。顺序查找按照数组原有序列进行查找,二分查找则是每次让左右边界的中间位置的值跟需要查找的相比较,并不断缩小左右边界,直到找到或者左边界大于右边界。

(3)设计

伪代码

//二分查找
BinarySearch(max,min,des)
mid-<(max+min)/2
while(min<=max)
mid=(min+max)/2
if mid=des then
return mid
elseif mid >des then
max=mid-1
else
min=mid+1
return max
//顺序查找
1. 设置哨兵;

2. 设置查找的起始下标i=n;

3. 若r[i]与k相等,则返回当前i的值;

否则,继续比较前一个记录;

(4)分析

二分查找

时间复杂度为O(logN)

int binarySearch(int list[],int left,int right,int number){
    if(list==NULL)
        return -1;
    int index=0;
    int mid=(right+left)/2;
    if(left>right){
        return -1;
    }
    if(number==list[mid]){
        index=mid;
        return index;
    }else if(number>list[mid]){
        binarySearch(list,mid+1,right,number);
    }else{
        binarySearch(list,left,mid-1,number);
    }
}

顺序查找

时间复杂度为O(n)

int seqSearch(int list[],int number){
    if(list==NULL)
        return -1;
    int index=0;
	while(list[index]){
		if(list[index] == number){
			return index;
		}else{
			index++;
		}
	}
    return -1;
}

(5)源代码

GitHub源代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值