前提:采用二分法查找时,数据需是排好序的
二分法排序的思想:假设一个数组是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止;当然要是不存在就返回-1(数组下标不可能为负)。
代码如下:
int Binary_Bearch(int arr[], int sz,int num)
{
int mid = 0;
int left = 0;
int right = sz - 1;
assert(arr);
while (left<=right)
{
mid = (left + right) / 2;
if (num > arr[mid])
{
left = mid + 1;
}
else if (num < arr[mid])
{
right=mid-1;
}
else if (num == arr[mid])
{
return mid;
}
}
return -1;
}
测试函数:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int sz = sizeof(arr) / sizeof(arr[0]);
int num = 8;
int ret=Binary_Bearch(arr, sz, num);
printf("%d\n", ret);
getchar();
return 0;
}
这里结果肯定就是 7