二分法查找顺序数组的指定元素

1.顺序查找
利用循环语句,按顺序依次比较目标量与数组中的元素是否相等,查找时间较长。
2.二分法查找
在区间中每次取一个中间量与指定量比较大小,直到区间的左端与右端相等,此时该下标对应的元素与目标相等则找到了,否则数组中没有这个数。
查找数字25:
在这里插入图片描述
左端:0
右端:6
中间:3
a[3]<25
左端:4
右端:6
中间:5
a[5]>25
左端:4
右端:4
中间:4
a[4]=25 查找完毕

#include <stdio.h>
int v[] = {2,4,9,11,25,66,77};
/*在一个有序数组查找具体数字n*/

int binsearch(int x,int y[],int z);
void half_search(int x,int y[],int z);
int main()
{
	int N;
	int len;
	len = sizeof(v)/sizeof(v[0]);
	scanf("%d",&N);
	binsearch(N,v,len);
	half_search(N,v,len);
	return 0;
}

int binsearch(int x,int y[],int z)
{
	   int i;
	   for(i=0;i<z;i++)
	   {
		   while(x == y[i]){
			   printf("%d为第%d个元素\n",x,i+1);
			   return i+1;
		   }
	   }
	   printf("未找到\n");
	   return 0;
}
void half_search(int x,int y[],int z)
{
	int len = 7;//计算元素个数
	int middle = (len-1)/2;
	int left = 0;
	int right = len - 1;
	int i;
	for(i=0;i<3;i++)
	{
		if(y[middle]==x)
		{
			printf("%d为第%d个元素\n",x,middle+1);
			break;
		}
		if(y[middle]<x)
		{
			left = middle+1;
			right = right;
		}
		if(y[middle]>x)
		{
			left = left;
			right = middle-1;
		}
		middle = (left + right)/2;
		if(left == right && y[middle] != x )
		{
			printf("未找到\n");
			break;
		}

	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值