• 二分法扩展——就近查找


    二分查找拓展问题

    设计算法,在正序排列数组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 }
    //整数数组 
  • 相关阅读:
    用Android Studio 开发Android应用
    以前写的一个下载小说的工具
    折半算法的C#实现方式-递归和非递归
    128. 最长连续序列
    一语点醒技术人:你不是 Google(转载)
    计算机专业导论与思维系统--哈工大
    安卓笔记 09_28
    安卓学习笔记
    安卓数据库08_29
    08_28学习笔记Kotlin
  • 原文地址:https://www.cnblogs.com/ytdyz/p/12354532.html
Copyright © 2020-2023  润新知