二分法扩展——就近查找

二分查找拓展问题

设计算法,在正序排列数组L中查找元素x,

输出x或最接近x(如果不存在的话)的元素下标。

 1 #include <stdio.h>
 2 int Binary_search(int array[], float x, int left, int right);
 3 int main(int argc, const char *argv[])
 4 {
 5     int a[10] = {-1,3,5,6,7,8,9,12,13,17};    //整数数组 
 6         int left  = 0;
 7         int right = 9;
 8     float x;
 9         scanf("%f",&x);
10     int flag = Binary_search(a,x,left,right);
11     printf("%d\n",flag);
12     return 0;
13 }
14 int Binary_search(int array[], float x, int left, int right)
15 {    
16     int mid = (right+left)/2;    //计算中值点 
17     if (left > right)            //未查找到,判断。
18     {    
19         if         (right < 0)   //x比array[0]小时
20             return array[0];
21         int double_average = array[right]+array[left];    //x比array[0]大时 
22         if         (double_average  < 2*x)                //array[left]和array[right]的平均数和x比较 
23             return array[left];                           //防止精度缺失,故采用乘法 
24         else if    (double_average  > 2*x)
25             return array[right];
26         else
27         {
28             printf("%d\t",array[left]);                    //array[left]和array[right]的平均数就是x时 
29             return array[right];    
30         }    
31     }
32     if        (x == array[mid])        //查找到,返回。
33         return array[mid];
34     else if   (x < array[mid])         //左端查找 
35         return Binary_search(array,x,left, mid-1);
36     else                               //右端查找 
37         return Binary_search(array,x,mid+1,right);
38 }

 

//整数数组 
posted @ 2020-02-23 21:46  3月の狮子  阅读(279)  评论(0编辑  收藏  举报