• 分治法(二分查找)


    给出有序排列的一组数组求出指定元素的下标。

    一开始纠结数组奇偶个数,能否查询到首尾。稍加分析后可以发现并不会收到这些因素干扰。

     1 // 二分找出其中指定关键字的下标 1,3,5,7,9,13,15,17
     2 
     3 
     4 
     5 #include <stdio.h>
     6 #include <stdbool.h>
     7 
     8 /****** 递归实现******* 
     9 int Findmax(int keyNum,const int box[],int size,int left,int right)       //传入参数为(关键字,数组,数组大小,左界,右界
    10 {
    11     int mid = (left + right) / 2;                                         
    12     if(box[mid] == keyNum)                                             //如果中间值 为关键字则直接输出
    13     {
    14         return mid;
    15     }
    16     else
    17     {
    18         
    19         if(box[mid] > keyNum)                                          //如果中间值大于关键字,将右界改为mid -1 即搜索左半
    20         {
    21             return Findmax(keyNum,box,size,left,mid - 1);
    22         }else
    23         if(box[mid] < keyNum)
    24         {
    25             return Findmax(keyNum,box,size,mid + 1,right);            //如果中间值小于关键字,将左界改为mid +1 即搜索右半
    26         }
    27     }
    28 }
    29     
    30     
    31     
    32 // **************以下循环实现 
    33 int main ()
    34 {
    35     int box[9] = {1,3,5,7,9,11,13,15,17};
    36     int keyNum = 13;
    37 
    38     int left = 0;
    39     int right = 8;
    40     int mid;
    41     while(true)
    42     {
    43         mid = (left + right) / 2;    //*****此处可以注意优化          
    44         if(box[mid] == keyNum)
    45         {
    46             break;
    47         }else
    48         if(box[mid] > keyNum)
    49         {
    50             right = mid - 1;
    51         }else
    52         left = mid + 1;
    53     }
    54     return 0 ; 
    55 }

         注意点在于   mid = (left + right) / 2 可能导致溢出,应该使用 mid = (right - left) / 2 + left 。

      时间复杂度 O(logn)

  • 相关阅读:
    开发中常用的JS知识点集锦
    浏览器音频兼容和ffmpeg的音频转码使用
    web页面和小程序页面实现瀑布流效果
    微信小程序之支付密码输入demo
    Mac安装nginx配置过程
    前端工具mock的使用
    汇编语言学习
    Swift学习笔记
    如何快速融入团队并成为团队核心(四)
    如何快速融入团队并成为团队核心(三)
  • 原文地址:https://www.cnblogs.com/Ponytai1/p/5869819.html
Copyright © 2020-2023  润新知