折半查找(二分查找的使用)

#define _CRT_SECURE_NO_WARNINGS 1

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int binary_search(int arr[], int k, int sz)
{
	int left = 0;
	int right = sz - 1;
	while (right >= left)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
			return mid;

	}
	return -1;
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int ret = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	 ret = binary_search(arr, k, sz);
	 printf("%d", ret);
	return 0;
}

首先定义一个有序数组(二分查找只适用于有序的数集),定义局部变量k,作为被查找的数,定义数组的长度sz,(sizeof为判断数据类型长度的关键字),此时需定义二分查找的函数"binary_search"和其所需要的参数,while循环的判断条件为"right>=left",(“=”的情况为查找到中间只有一个数,此时循环已经给“left”或“right”赋值),定义mid为left和right的平均值作为数组的下标,(实现二分查找),使用if语句,当数组的中间值1大于k,则将中间值mid-1作为新的右范围,即“right=mid-1",反之则同理,当找到时return mid,不满足循环条件时,则返回值为-1(此时不能返回0,因为会和数组第一个数的下标混淆),然后主函数内定义变量ret,用于接收调用函数的值,然后输出ret的值即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值