zoukankan      html  css  js  c++  java
  • 5.二分查找 = 折半查找

     1 /*
     2     折半查找 = 二分查找
     3         2的n次数 = m ,那么在m个数据中,查找1个数据,只需要n次
     4 
     5         效率非常高,对于海量数据非常高效
     6 
     7         前提是: 该数组已经排序过了
     8 */
     9 
    10 
    11 
    12 #include "BinarySearch.h"
    13 #include <iostream>
    14 using namespace std;
    15 int BinarySearch(int *a,int nLen,int nNumberic);
    16 
    17 int main()
    18 {
    19     const int nLen = 10;
    20     int list[nLen] = {1,2,3,4,5,6,7,8,9,10};
    21     int nNeedNumberic = 11;
    22 
    23     int nRet = BinarySearch(list,nLen,nNeedNumberic);
    24     if (-1 == nRet)
    25     {
    26         cout <<"二分查找:没找到"<<endl;
    27     }
    28     else
    29     {
    30         cout <<"二分查找:找到了!"<<endl;
    31     }
    32 
    33     system("pause");
    34     return 0;
    35 }
    36 
    37 
    38 //二分查找代码逻辑   
    39 int BinarySearch(int *a,int nLen,int nNumberic)//前提是: 该数组已经排序过了
    40 {
    41     /*
    42         *a是数组
    43         nLen是数组长度
    44         nNumberic是要查找的数据
    45 
    46         return的是下标
    47     */
    48 
    49     int low = 0;            //起始下标
    50     int high = nLen -1;        //最后1个下标
    51     int mid;                //中间下标
    52 
    53     while (low <= high)//当low > high的时候,循环结束,就表示在数组里没有找到nNumberic
    54     {
    55 
    56         mid = (low + high) / 2;//整数+整数相除可能有小数,但是默认规则是舍去小数位,依然可以得到小于high的整数索引
    57 
    58         if (a[mid] == nNumberic)
    59         {
    60             return mid;//找到了nNumberic,返回下标
    61         }
    62         else if (a[mid] < nNumberic)//nNumberic在下半部分
    63         {
    64             low = mid + 1;//重新设置查找范围的起始地址  
    65         }
    66         else if (a[mid] > nNumberic)
    67         {
    68             high = mid - 1;//重新设置查找返回的结束地址
    69         }
    70 
    71         //这里的 mid + 1 和 mid - 1 只是重新设置查找范围
    72     }
    73 
    74     //如果没有该nNumberic 就返回-1
    75     return -1;
    76     
    77 }
  • 相关阅读:
    Android Studio 插件(不定期更新)
    Spring 之 @ComponentScan以及mock Spring MVC
    Spring MVC 之传递模型数据到视图中
    开发笔记
    最小可用 Spring MVC 配置
    Spring 之定义切面尝试(基于 XML)
    Spring 之定义切面尝试(基于注解)
    Spring 之高级装配
    Spring 之混合配置
    Spring 之通过 XML 装配 bean
  • 原文地址:https://www.cnblogs.com/Froger/p/6811875.html
Copyright © 2011-2022 走看看