zoukankan      html  css  js  c++  java
  • 例25:二分查找

    二分查找大一的时候是试图写过一次的,但当时因为还加了一种其他算法,所以也没有写出来,之后对它有了一种很难的感觉,但现在一看,其实也非常简单。它其实就是好像电气工程师找电线断点一样,对半找,理论上最快。哎,我实在不知道这算法的思想该怎么去说,所以直接上步骤,后面接代码。

    1.直接从中间的元素开始找,此元素与要找的值做比较,有三种情况,相等,大于和小于,相等则记录此元素位置并返回true结束函数,大于则缩小范围,让右边界等于此元素的位置减一,小于则让左边的边界等于此元素位置加一。

    2.循环此过程直到左边界大于右边界跳出,此时其中始终没有元素与要找的值相等,所以代表未找到,返回false结束函数。

    代码如下:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 
     4 bool BinarySearch(int *pArray,int nCount,int *pCount,int numAnswer)
     5 {
     6      int low = 0,high = nCount-1;
     7      while(low <= high)
     8      {
     9                int middle = low + (high-low)/2;
    10                if(pArray[middle] == numAnswer)
    11                {
    12                                  *pCount = middle+1;
    13                                  return true;
    14                }
    15                else if(pArray[middle] > numAnswer)
    16                {
    17                     high = middle - 1;
    18                }
    19                else
    20                {
    21                     low = middle + 1;
    22                }
    23      }
    24      return false;
    25 }
    26 int main()
    27 {
    28     int pArray[20],nCount,numAnswer,answerPos;
    29     while(~scanf("%d",&nCount) && nCount)
    30     {
    31                                for(int i = 0;i<nCount;i++)
    32                                {
    33                                        scanf("%d",&pArray[i]);
    34                                }
    35                                scanf("%d",&numAnswer);
    36                                if(BinarySearch(pArray,nCount,&answerPos,numAnswer))
    37                                printf("answerPos:%d
    ",answerPos);
    38                                else 
    39                                printf("The Number is Not Here!
    ");
    40     }
    41     
    42     return 0;
    43 }
  • 相关阅读:
    从U盘安装Windows 7 / Vista / 2008
    Windows 7 Enterprise 微软官方90天评估序列号
    Windows 2008 Vista 安装sp2后释放C盘空间
    Windows 7 一年试用批处理
    Windows 2008 R2 试用版序列号
    又出来一个OEM的序列号
    查看 windows 7 激活信息的相关命令
    最新一组OEM Key
    Windows 7 / Vista 分区问题
    MSN 9 多开设置
  • 原文地址:https://www.cnblogs.com/FWFC/p/6287342.html
Copyright © 2011-2022 走看看