首页 > 其他 > 详细

折半查找(二分查找)

时间:2020-07-01 11:10:36      阅读:60      评论:0      收藏:0      [点我收藏+]

折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列,注意必须要是有序排列

二分查找的基本思想是将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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!