二分查:在一个有序的数组中进行查找具体的某个数
如果找到了返回这个数的下标,没有找到返回-1
//写一个函数,实现一个整形有序数组的二分查找
#include<stdio.h>
int binary_search(int arr[], int k, int sz)
{
int left = 0; //左侧第一个元素下标是0;
int right = sz - 1;
while (left < right)
{
int mid = (left + right) / 2;//中间元素下标
if (arr[mid] < k) //若查找的元素在中间元素右侧
{
left = mid + 1; //左侧下标为中间元素+1
}
else if (arr[mid] > k)//若查找的元素在中间元素左侧
{
right = mid - 1;//右侧下标为中间元素-1
}
else
{
return mid;
}
}
return -1;
}
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 5;
//printf("请输入想要查询的元素:k");
//scanf("%d",&k); 可以手动输入其余元素k值
int sz = sizeof(arr) / sizeof(arr[0]);//通过计算得知数组的元素个数
int ret = binary_search(arr,k,sz);//利用二分查找数组中元素k
if (ret ==-1)
{
printf("没有找到指定的元素数\n");
}
else
{
printf("找到了指定元素,下标是: %d\n",ret);
}
return 0;
}
因为设置的数组查询元素是5,所以结果为4
可以自己调节设置元素,并编码