数组中的二分查找

二分查找

二分查找,也叫折半查找。在有序的数组中查找指定的数字。

关键点在找出数组中中间数字,计算出中间数字的下标,查找范围左右下标的平均值就是中间元素的下标。

功能:

在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回 - 1。
 arr 是查找的数组。

left 数组的左下标 。

 right 数组的右下标。   

key 要查找的数字。

    int bin_search(int arr[], int left, int right, int key)
	{
		int i = 0;
		int flag = 0;
		while (left <= right)
		{
			//int mid = (left + right) / 2;
            int mid = left +((right -left)>> 1);//移位操作符很少会越界

			if (arr[mid] < key)
			{
				left = mid + 1;
			}
			else if (arr[mid] > key)
			{
				right = mid - 1;
			}
			else
			{
				flag == 1;
				return mid;
			}
			if (flag == 0)
			{
				return -1;
			}
		}
	}
	int main()
	{
		int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
		int key = 0;//在数组中查找输入的数
		printf("请输入你要找的数字:");
		scanf("%d", &key);
		int sz = sizeof(arr) / sizeof(arr[0]);
		int left = 0;//左下标
		int right = sz - 1;//右下标
		int c = bin_search(arr,left,right, key);
		printf("%d", c);

		return 0;
	}

以上内容,如果有任何问题,请留言或私信我。期待与大家沟通交流。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值