二分法

Posted ytdyz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分法相关的知识,希望对你有一定的参考价值。

二分查找拓展问题

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

 

//整数数组 

以上是关于二分法的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数