一.举例
二.算法时间复杂度
假设一共有n个元素
第一次折半元素个数变为n/2;
第二次折半元素个数变为n/4;
第三次折半元素个数变为n/8;
。。。。。
第k次折半元素个数变为n/2^k;
。。。。。
假设k次找到,即为n/2^k=1;
k=log2(n);
三.函数实现
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int binsearch(int a[], int x, int n)
{
int high = n - 1;
int low = 0;
while (low <= high)
{
int mid = (high + low) / 2;
if (a[mid] == x)
{
return mid;
}
else if (a[mid] < x)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
if (low > high)
printf("抱歉我没有找到\n");
return -1; //下标为-1表示没有找到
}
int main()
{
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
int x = 0;
int n = 0;
printf("请输入要在数组中查找的数:\n");
scanf("%d", &x);
n = sizeof(a) / sizeof(a[0]);
int index = 0;
index = binsearch(a, x, n);
printf("下标为:%d\n", index);
return 0;
}
四.语句循环流程图