zoukankan      html  css  js  c++  java
  • 关于二分查找算法(也叫折半查找)

    二分查找算法是一种快速的查找算法。当我们再一个数组中查找是否存在某个数时,通常是直接遍历

    这个数组直到找到这个数,时间复杂度为O(n)试想如果数据量很大,上亿呢,怎么办,这里我们可以用

    一种简单快速的的查找算法--二分查找算法也叫做折半查找算法。

     

    二分查找算法的算法思维:

    1.首先查找数组必须是有序的(假设为升序)。

    2.取查找数组中间的数作为基准,如果需要查找的数据大于基准说明该数存在于 数组的左边。反之存在于基准右边。

    3 假设待查找的数小于基准,那么将基准换成左子数组的中间的数,重复步骤2,直到找到该数。

     

    很显然对于上亿规模的数据查找,我们可以将待查找的数据进行排序,然后再用二分查找进行查找。

     

    二分查找的时间复杂度为O(logn),

    logn是什么意思呢  意思是当我们在1000个元素中查找某个元素时 只需要10次比较就可以找到该元素

     

    记住二分查找只能针对有序数据,切记这一点。

     

    二分查找实现如下:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 bool FindByTwo(int *nums,int numsSize,int number)
     5 {
     6     int mid;
     7     int left=0;
     8     int right=numsSize-1;
     9     
    10 
    11     while(left!=right)
    12     {
    13         mid=(left+right)/2;    
    14         if(number==nums[mid])
    15         {
    16             return true;
    17         }
    18         else
    19         {
    20             if(number>nums[mid])
    21             {
    22                 left=mid+1;
    23             }
    24             if(number<nums[mid])
    25             {
    26                 right=mid-1;
    27             }
    28         }
    29     }
    30 
    31 
    32     return false;
    33 }
    34 
    35 
    36 int main()
    37 {
    38 
    39     int nums[10]={1,2,3,4,5,6,7,8,9,10};
    40     int numsSize=10;
    41     int number=8;
    42     if(FindByTwo(nums,numsSize,number))
    43     {
    44         cout<<"Find The number: "<<number<<endl; 
    45     }
    46     else
    47     {
    48         cout<<"Can not Find The number: "<<number<<endl; 
    49     }
    50     return 0;
    51 }

    运行截图:

    当查找8时:

    当查找20时:

    OK,二分查找就介绍结束了哦

  • 相关阅读:
    Windows下搭建HTK
    使用VS2012遇到的问题
    Chapter 3:Speech Production and Perception
    Chapter2:Discrete-Time Signal Processing and Short-Time Fourier Analysis
    Chapter 1:Introduction
    将SVM用于多类分类
    Kernel ridge regression(KRR)
    Sklearn学习笔记
    LDA与QDA
    〖Linux〗使用ssh登录远程主机,并在本地打开远程图形界面
  • 原文地址:https://www.cnblogs.com/vpoet/p/4665172.html
Copyright © 2011-2022 走看看