二分查找——C语言算法

本文介绍了二分查找算法,包括其定义、适用条件(有序且递增),以及在C语言中的实现过程。通过示例展示了如何编写一个查找函数,如在升序数组中查找指定数值并返回其下标或-1。
摘要由CSDN通过智能技术生成

1.什么是二分查找


1.二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素必须是有序排列。

2.二分查找的条件


1.是一个有序数列。
2.必须是按照大小进行排序。


3.二分查找的实现原理


1.假设我们比较的有序数列有三个数,我们比较一个元素的值和数组中间位置的元素的值进行比较,如果比中间的元素大,则在有序数组的后半部分进行查找;如果中间位置的元素的值小,则跟有序数组的前半部分进行比较;如果相等,则找到了比较元素的位置。

3.1 流程


1.把待查找的元素与有序数组的中间位置的值进行比较,如果大于则比较后半部分,小于则比较前半部分。
2.此后,有序数组变为原来数组的前半部分或者后半部分。
3.继续执行第一步,依次比较元素与当前数组的中间值的大小。

例题:

写一个二分查找函数

功能:在一个升序数组中查找指定的数值,找到了就返回下标,找不到就返回-1.

#define _CRT_SECURE_NO_WARNINGS 1
// arr 是查找的数组
//left 数组的左下标
//right 数组的右下标
//key 要查找的数字
#include <stdio.h>
int bin_search(int arr[], int left, int right, int key)
{
	int find = -1;//找不到就返回-1
	while (left <= right)
	{
		int mid = (left + right) / 2;//中间的下标
		if (arr[mid] < key)
		{
			left = mid + 1;//中间值比需要值小,左端向右移一位
		}
		else if (arr[mid] > key)
		{
			right = mid - 1;//中间值比需要值大,右端向左移一位
		}
		else
		{
			find = mid;//将中间下标赋值给查找值
			break;
		}
	}
	return find;//返回查找值
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数
	int left = 0;//左端下标初始值为0
	int right = sz - 1;//右端下标初始值为元素个数-1
	int key = 0;
	scanf("%d", &key);
	int ret = bin_search(arr, left, right, key);//将函数返回值赋值给一个变量
	printf("%d", ret);
	return 0;
}

有不足之处或补充欢迎指出。

喜欢就一键三连吧~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值