感受编程与数理统计“浑然天成”妙趣——二分查找算法

算法描述:

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

        二分查找的查找过程为:​首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。​


以例说法:

        假如有一个元素个数为m的有序数组,现在要从中查找具体的某个数字n,如果从头到尾挨个查找的话,有可能要查找n次才找得到它,而要是用上二分查找的方法,能大大提升查找效率。(二分查找算法的时间复杂度为O(log(n)))

        代码如下:(下为C语言代码,注意浏览代码的注释,这对于全面了解本例及代码思想十分重要)

int main()
{
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10 }; //假设现在有这样一个数组,里面共10个数。
	int target = 7;  //我们的目标是找到“7”这个数。
	int sz = sizeof(arr) / sizeof(arr[0]); //这行代码的目的是把arr[]这个数组中元素的个数赋给sz。
	int left = 0; // 表示arr[]数组的左下标
	int right =sz - 1;// 表示arr[]数组的右下标
	

	while (left <= right)  //当arr[]数组左右下标错位了都还没查找到目标数字,那么该让它(循环)停下来了
	{
		int mid = (left + right) / 2; // 表示arr[]数组中位下标
		if (arr[mid] > target)
		{
			right = mid-1; //二分法的思想就体现出来了
		}
		else if (arr[mid] < target)
		{
			left = mid+1;
		}
		else 
		{
			printf("恭喜你成功找到!下标是:%d\n",mid);
			break;
		}
			
	}
	if (left > right)
		printf("找不到~_~");
	return 0;
}

文章到这里就结束啦~希望能对你有所启迪!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuxuanmei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值