二分查找算法

  • 二分查找也称折半查找,它是一种效率较高的查找方法(每一次的查找都可以缩短一半要查找的范围)
  • 使用的前提要保证数组是有序的

查找的过程

  1. 首先我们要先找出数组存储数值最小的下标(left)和存储数值最大的下标(right),使得我们可以得到中间下标的位置(mid)
  2. 我们把要查找的数和数组中间下标存储的值进行比较,要是相等就退出,要是要查找的数字大于数组中间下标存储的数字,那我们就让left等于mid+1,否则如果要查找的数字小于中间下标存储的数,那我们就让right等于mid-1
  3. 循环结束调节是left <= right
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdbool.h>

int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0])-1;//下标从0开始
	int k = 7;//查找的数
	int mid = 0;
	bool flag = false;
	while (left <= right)
	{
		mid = (left + right) / 2;
		if (k < arr[mid])
		{
			right = mid - 1;
		}
		else if (k > arr[mid])
		{
			left = mid + 1;
		}
		else
		{
			flag = true;
			break;
		}
	}
	if (flag)
	{
		printf("找到了,下标是:%d\n", mid);

	}
	else
	{
		printf("没找到\n");
	}
	return 0;
}

然后我扩展一个题目(跟二分查找无关)

题目:多个字符从两端移动,向中间汇聚

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
//多个字符从两端移动,向中间靠拢
int main()
{
	char arr1[] = "welcome to bit...";
	char arr2[] = "#################";
	int left = 0;
	int right = strlen(arr1)-1;//计算'\0'前的字符,下标从0开始所以-1
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
        //1000单位毫秒等于1秒,作用时程序休息1秒,使用要包含头文件<windows.h>
		Sleep(1000); 
        //system:库函数用来执行系统命令,使用要包含头文件<stdlib.h>  cls:清理屏幕
		system("cls"); 
		left++;
		right--;
	}
    //因为循环最后执行力cls,所以最后我们还要单独在输出一次arr2
	printf("%s\n", arr2);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值