顺序查找与二分查找的代码实现

顺序查找与二分查找的代码实现

顺序查找:

基本思想

1.依次扫描A中的所有元素,将每个元素与x比较;

2.如果在i次比较后1<=i<=n搜索成功,即x==A[j],则返回j的值;

3.否则返回0,表示没有找到。

对于一个大小为n的排序数组,算法执行比较的最大次数为n

二分查找:

基本思想

1.令A [low…high]为元素按升序排列的非空数组, A [mid]为中间元素,假定x>A [mid];

2.注意到如果x在A中,则它必定是A[mid+l],A[mid+2] ,…,A[hign]当中的一个;

3.接下来只需在A[mid+1…high]中搜索x。

对于一个大小为n的排序数组,二分查找算法执行比较的最大次数为[log n]+1

C++代码实现;

#include <iostream>
using namespace std;
//通过顺序搜索寻找升序数组A[1..n]中值为x的元素,若A[j]=x,输出j,反之则输出0
int shunxv(int a[], int x,int n)
{	
	for (int i = 1; i<=n; i ++)
	{
		if (a[i] == x)
			return i;
	}
	return 0;
}
//通过二分搜索寻找升序数组A[1..n]中值为x的元素,若A[j]=x,输出j,反之则输出0
int  erfen(int a[],int x,int n)
{
	if (n == 0)
		return 0;
	int low = 1;
	int high = n;
	int mid;
	while (low <= high)
	{
		mid= (low + high) / 2;
		if (x == a[mid])
		{
			return mid;
		}
		if (x < a[mid])
		{
			high = mid - 1;
		}
		if (x > a[mid])
		{
			low = mid + 1;
		}
	}
	return 0;
}
int main()
{
	int eg[10] = { 0, 2, 3, 6, 8, 10, 11, 15, 20, 21 };
	int n =  sizeof(eg) / sizeof(eg[1]) - 1;
	cout << "顺序查找1结果:" << shunxv(eg, 1, n) << endl;
	cout << "顺序查找20结果:" << shunxv(eg, 20, n) << endl;
	cout << "二分查找1结果:" << erfen(eg, 1, n) << endl;
	cout << "二分查找20结果:" << erfen(eg, 20, n) << endl;
	return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eduics

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值