二分查找算法(折半查找算法)

一般当我们在一组有序数组中查找某个元素n时,我们可以使用逐个对比查找的方法

例如

#include <stdio.h>

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10};
	int i = 0;
	int k = 6;
	int sz = sizeof(arr) / sizeof(arr[0]);   //计算元素个数
	for (i = 0; i < sz; i++)
	{
		if (k == arr[i])
		{
			printf("该数即为所求,下标为:%d\n", i);
			break;
		}
	}
	if (i == sz)
		printf("所给出的数中没有该数\n");
	return 0;
}

但是对于这种方法来讲一般比较麻烦,因为对于一个含有n个元素的数组,将会查找n次

因此我们引进二分查找算法来计算

同样的道理,我们在1~10这些数中寻找6

元素12345678910
下标0123456789

这样就大大省略了查找时间,才开始的10次查找——>3次

二分查找算法的源代码一般为:

int arr[]={ };  //空里面即为所给的元素
int k=?;    //为所求的数
int sz=sizeof(arr)/sizeof(arr[0]);    //计算元素个数
int left=0;    //左下标
int right=sz-1;    //右下标
while(left<=right)
{
    int mid=(left+right)/2;
    if(arr[mid]>k)
    {
        right=mid-1;
    }
    else if(arr[mid]<k)
    {
        left=mid+1;
    }
    else
    {
        printf("即为所求");
        break;
    }
    if(left>right)
        printf("所给的元素里面没有该数\n");
}

 下面我们给出具体的题目:在1~10这些有序数里面,寻找6;

思路为

代码展示如下: 

#include <stdio.h>

int main() {
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };  //空里面即为所给的元素
    int k = 6;
    int sz = sizeof(arr) / sizeof(arr[0]);    //计算元素个数
    int left = 0;    //左下标
    int right = sz - 1;    //右下标
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] > k)
        {
            right = mid - 1;
        }
        else if (arr[mid] < k)
        {
            left = mid + 1;
        }
        else
        {
            printf("即为所求的数,下标为:%d\n",mid);
            break;
        }
        if (left > right)
        {
            printf("所给的元素里面没有该数\n");
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值