二分查找
二分查找又称折半查找是一种高效的查找方法,可以在一个有序的数组中找到特定的值并返回其下标。
查找过程
1.假设数组中的数组按照升序排列,首先将数组中间位置的值和需要查找的数进行比较,
2.判断数组中间位置的值若大于所需要的值,则说明所需要查找的数在中间值的左边。如果小于所要查找的值,则说明该数在中间值的右边。
3.通过修改左右的范围,再一次进行找中间值,然后与所需的值进行判断直至找到我们要找的数。
代码实现
#include<stdio.h>
int main()
{
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int left = 0; \\左边的范围
int key = 5; \\需要查找的数
int right = sizeof(a) / sizeof(a[0]) - 1; \\右边的范围
while (left <= right)
{
int mid = left + (right - left) / 2; \\通过左右范围算出中间值
if (a[mid] > key)
{
right = mid - 1; \\调整右边范围
}
else if (a[mid] < key)
{
left = mid + 1; \\调整左边范围
}
else if (a[mid] == key)
{
printf("找到了!%d\n", mid);
break;
}
}
if (left > right)
{
printf("没找到\n");
}
return 0;
}
函数形式
int bin_search(int arr[], int left, int right, int key)
{
int mid = 0;
while (left <= right)
{
mid = (left + right) /2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
return mid; //找到了,返回下标
}
return -1; //找不到
}