C语言二分查找 -在有序数组中查找目标数字
程序员文章站
2024-03-15 20:12:18
...
二分查找(Binary Search) 也叫折半查找, 是一种效率较高的查找方法
前提条件是被查找的元素首先要有序排列
现有一个整型有序数组, 我们用代码实现一下二分查找:
在 [left, right] 区间内搜索目标数字, 首先求出区间的中间位置, 然后用中间位置的数字和目标数字作比较
1.如果这个数大于目标数字, 说明要查找的目标在整个区间的左半部分, 修改右侧区间为mid - 1, 在[left, mid-1]中继续搜索; 同理
2.如果这个数小于目标数字, 那么要查找的目标在整个区间的右半部分, 修改左侧区间为mid + 1, 在[mid+1, right]中继续搜索
找到了返回数组下标, 找不到返回-1
#include<stdio.h>
int Search(int* a, int n, int target)
{
int left = 0;
int right = n - 1;
// 在[left, right]区间中搜索目标数字
while (left <= right)
{
int mid = (left + right) / 2;
if (a[mid] > target)
{
right = mid - 1;
}
else if (a[mid] < target)
{
left = mid + 1;
}
else
return mid;
}
return -1;
}
int main()
{
int a[] = { 2, 3, 4, 5, 6, 7, 8, 9 }; //有序数组
int size = sizeof(a) / sizeof(a[0]); //求数组元素个数
int num = 6; //查找数字6
//int num = 1 //查找数字1
int ret = Search(a, size, num);
if (ret == -1)
printf("没有找到...\n");
else
printf("找到了,下标是%d\n", ret);
return 0;
}
运行结果截图:
目标数字是6时
目标数字是1时
上一篇: 关于多维数组的运算问题