一.举例
二.算法时间复杂度
假设一共有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;
}
四.语句循环流程图