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 }
  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/Froger/p/6811875.html
Copyright © 2011-2022 走看看