折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列,注意必须要是有序排列
二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,
如果x=a[n/2],则找到x,算法中止;
如果x<a[n/2],则只要在数组a的左半部分继续搜索x,
如果x>a[n/2],则只要在数组a的右半部搜索x.
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 //二分查找算法,找不到就返回-1,找到了就返回值
5 int binary_search(int *list,int len,int target) {
6 int low = 0;
7 int hight = len-1;
8 int middle;
9 while(low <= hight) {
10 middle = (low + hight)/2;
11 if(list[middle] = target) {
12 printf("已找到该值,数组下标为:%d\n",middle);
13 return list[middle];
14 } else if(list[middle] > target) {//左半部分查找
15 hight = middle -1;
16 } else if(list[middle] < target) {//右半部分查找
17 low = middle + 1;
18 }
19 }
20 printf("未找到该值");
21 return -1;
22 }
23
24 int main() {
25
26 int a[] = {2,4,5,8,9,44};
27 int b = binary_search(a,sizeof(a)/4,5);
28 printf("b=%d\n",b);
29 printf("Hello world!\n");
30 return 0;
31 }
输出:
1 已找到该值,数组下标为:2
2 b=5
3 Hello world!
原文:https://www.cnblogs.com/qunxuan/p/13218045.html