• Binary Search--二分查找


     

    Binary Search--二分查找

      采用二分法查找时,数据需是排好序的。 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。

      二分法查找在针对大量有序排列的情况下发挥出很优越的效率,其时间复杂度O(lgN)。

      

      代码:

     1 /*
     2 Author:Mengmeng
     3 Time:2016-6-27 23:33:49
     4 Description:
     5     采用二分法查找时,数据需是排好序的。 
     6     基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,
     7     如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;
     8     若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
     9 */
    10 #include <iostream>
    11 using namespace std;
    12 
    13 
    14 int BinarySearch(int data[],int min,int max,int dest,bool UpOrDown)
    15 {
    16     int mid = 0;
    17     if (min > max)//递归结束条件
    18     {
    19         cout << "找不到" << dest << "!"<<endl;
    20         return -1;
    21     }
    22     mid = (max + min) / 2;
    23     if (dest == data[mid])//递归结束条件
    24         return mid;
    25     if (UpOrDown == true)//升序排列
    26     {
    27         if (dest < data[mid])//递归条件
    28             return BinarySearch(data, min, mid - 1, dest, true);
    29         else
    30             return BinarySearch(data, mid + 1, max, dest, true);
    31     }
    32     else//降序排列
    33     {
    34         if (dest < data[mid])
    35             return BinarySearch(data, mid + 1, max, dest, false);
    36         else
    37             return BinarySearch(data, min, mid - 1, dest, false);
    38     }
    39     
    40 
    41 
    42 }
    43 int main(void)
    44 {
    45     int data1[] = { 0, 11, 22,33,44,55,66,77,88,99 };
    46     int data2[] = { 99, 88, 77, 66, 55, 44, 33, 22, 11, 0 };
    47 #if 0
    48     cout << "请参照下列数字:" << endl;
    49     cout<< "{";
    50     int len = sizeof(data1) / sizeof(int);
    51     for (int i = 0; i < len; i++)
    52         cout << data1[i] << " ";
    53     cout << "}" << endl;
    54     cout << "输入你要查找的目标:" << endl;
    55     int dest;
    56     cin >> dest;
    57     cout <<"----------------------------------------"<< endl;
    58     int index = BinarySearch(data1, 0, len - 1, dest,true);
    59 #endif
    60 #if 1
    61     cout << "请参照下列数字:" << endl;
    62     cout << "{";
    63     int len = sizeof(data2) / sizeof(int);
    64     for (int i = 0; i < len; i++)
    65         cout << data2[i] << " ";
    66     cout << "}" << endl;
    67     cout << "输入你要查找的目标:" << endl;
    68     int dest;
    69     cin >> dest;
    70     cout << "----------------------------------------" << endl;
    71     int index = BinarySearch(data2, 0, len - 1, dest, false);
    72 #endif
    73     if (index!=-1)
    74         cout << dest << "在数组中的位置为第" << index << "" << endl;
    75     return 0;
    76 
    77 }

      运行结果:

      (1)升序的情况:

        

      

      (2)降序的情况:

        

      

  • 相关阅读:
    未能加载文件或程序集“xxx, Version=x.x.x.x, Culture=neutral, PublicKeyToken=xxxxxxxxxxxx”或它的某一个依赖项。系统找不到指定的文件
    RabbitMQ本地正常,发布到服务器上 出行连接失败
    Windows 服务 创建 安装 卸载 和调试
    CSS 格式化 一行一条
    ES6---new Promise()讲解,Promise对象是用来干嘛的?
    Win Server 2008 R2 IIS 默认只能添加一个 443 HTTPS 端口
    MVC 部分视图:Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 区别
    ;(function ($, undefined){ })(jQuery); 的使用及说明
    JS中的call()方法和apply()方法用法总结
    MongoDB服务无法启动,windows提示发生服务特定错误:100
  • 原文地址:https://www.cnblogs.com/codingmengmeng/p/5621945.html
Copyright © 2020-2023  润新知