二分查找:
举个例子,我们平常买东西,比如买了一双鞋,如果我告诉你不高于500元,然后让你猜价格,你肯定不会从1元,2元开始猜,这得猜到什么时候去,我们一般都会从它一个比较中间的值猜,比如250,这就是二分查找,所谓的二分查找就是折半查找,关键点是找出它的中间值,然后拿这个中间值去和要查找的数进行比较,如果大了就往小猜,小了就再往大了猜。
注意事项:
二分查找只针对有序且是升序的数组,不针对乱序的。
下面有一个题目:让用户输入一个想查找的数,然后在创建好的数组里查找有没有这个数,如果有,则输出它的下标,如果没有,则输出没找到。
int main()
{
//1.首先需要定义一个数组
int arr[]={1,4,5,7,9};
//2.输入要查找的数
printf("请输入你想查找的数\n");
int input=0;
scanf("%d",&input);
//3.定义变量
//假设flag=0的情况为没找到,后面找到了的情况就让flag=1
int flag=0;
//定义第一个元素的下标变量
int left=0;
//定义最后1个元素的下标变量,最后一个元素下标=数组元素个数-1
int right=(sizeof arr/sizeof(int))-1;
//定义中间值的下标变量
int mid=0;
//4.进入循环
while(left<=right)
/*当left=right时,进入最后一轮查找,此时left=right=mid,就只剩这最后1个元素了,中间值也是它*/
{
//计算中间值
mid=(left+right)/2;
//将中间值和input的值进行比较
if(arr[mid]<input)
{
left=mid+1;
}
else if(arr[mid]>input)
{
right=mid-1;
}
else
{
flag=1;
break;
}
}
if(flag==1)
{
printf("找到了,下标是%d",mid);
}
else
{
printf("抱歉,没找到\n");
}
return 0;
}
多个字符从两端移动,像中间汇聚
#include <stdio.h>
#include <string.h>
int main()
{
//本来是打印**********的然后用welcome to bit!来代替这组
考察了字符数组,以及遍历循环的知识点
//首先定义数组
char arr1[] = "welcome to bit!!!";
char arr2[] = "*****************";
//这一步操作主要是为了让两个数组的字符长度一致,strlen函数是用来统计字符串长度的,它包括\0
//但是用sizeof(arr1)/sizeof(char)这个方法,它不包含\0.
//printf("%d\n",strlen(arr1));
//printf("%d\n",strlen(arr2));
//定义最左边第一个元素的下标和最右边最后一个元素的下标
int left=0;
int right=strlen(arr1)-1;
//进入循环
while(left<=right)
{
arr2[left]=arr1[left];
arr2[right]=arr1[right];
printf("%s\n",arr2);
//休眠函数,单位是毫秒,需要包含头文件#include <windows.h>
Sleep(1000);
//清屏函数,也是需要包含头文件#include <windows.h>
system("cls");
left++;
right--;
}
return 0;
}