码迷,mamicode.com
首页 > 其他好文 > 详细

二分法

时间:2020-02-23 22:27:51      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:style   col   pre   else   div   正序   flag   scan   span   

二分查找拓展问题

设计算法,在正序排列数组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 }

 

//整数数组 

二分法

标签:style   col   pre   else   div   正序   flag   scan   span   

原文地址:https://www.cnblogs.com/ytdyz/p/12354532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!