二分搜索(c语言)

二分搜索:

一种效率较高的搜索算法,但要求要排序的数组必须是有序的。

核心思想:

每次都从中间查找,若找到的值大于中间值,则往后找(原数组为升序数组),不然往前查找。

图片演示:

 代码实现:

#include <stdio.h>
 
int search(int arr[], int k, int sz)
{
   //算法实现
	int left=0;
	int right=sz-1;
 
 	while(left<=right)
	{
	   int mid=(left+right)/2;   //中间元素下标
	   if(arr[mid] <k)
	   {
	      left=mid+1;
	   }
	   else if(arr[mid] >k)
	   {
	     right=mid-1;
	   }
	   else
	   {
	     return mid;
	   }
	}
     return -1;
}
 
int main()
{
	//二分查找
	//在一个有序数组中查找具体的某个数
	//如果找到了返回,这个数的下标,找不到的返回-1
 
	int arr[]={2,4,7,11,13,16,21,24,27,32,36,40,46};
	int k=36;
	int sz=sizeof(arr)/sizeof(arr[0]);
	int ret=search(arr, k, sz);
 
		if(ret == -1)
		{
           printf("找不到指定数字\n");
		}
		else
		{
		  printf("找到了,下标是: %d\n ", ret);
		}
 
       return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值