算法分析与实践 作业3

检索问题

1、问题

在一个排好序的数组T[1…n]中查找x,如果x在T中,输出x在
T的下标j;如果x不在T中,输出j=0;

2、解析

顺序搜索:在一个数组中只要从前到后或者从后到前逐个遍历,就能判断该数组是否含有所要找的元素
二分搜索:二分是一种常用的算法,将数组升序或者降序排列(必须要有顺序),每次去数组中间的元素与目的元素比较,然后将数组一分为二,以此类推,直到找到目的元素,或者最后数组的下标重合,表示该元素不在数组中

3、设计

顺序检索:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e3+5;
int main(){
	int m[maxn];
	int n,a,b=0;
	cin>>n>>a;     //n数组元素,a目标元素 
	for(int i=1;i<=n;++i){
		cin>>m[i];
		if(a==m[i]) b=i;
	}
	printf("下标 = %d",b);
} 

在这里插入图片描述
二分检索:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=1e3+5;
int m[maxn];
int n,a;
//该题默认是有序数组 
int Binary_Search(int x){
	int l=1,r=n;
	while(l!=r){
		int mid=(l+r)/2;
		if(x<m[mid]) r=mid-1;
		else if(x>m[mid]) l=mid+1;
		else{
			return mid;
		}
	}
	return 0;
} 
int main(){
	cin>>n>>a;     //n数组元素,a目标元素 
	for(int i=1;i<=n;++i){
		cin>>m[i];
	}
	printf("下标 = %d",Binary_Search(a));
} 

在这里插入图片描述

4、分析

时间复杂度:
顺序检索:O(n)
二分检索:O(logn)

5、源码

二分检索:https://github.com/zhaozhiliangzzl/-/blob/master/%E4%BA%8C%E5%88%86%E6%A3%80%E7%B4%A2.cpp
顺序检索:https://github.com/zhaozhiliangzzl/-/blob/master/%E9%A1%BA%E5%BA%8F%E6%A3%80%E7%B4%A2.cpp

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 技术黑板 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读