• 算法 查找算法--二分查找


    二分査找也称折半査找,其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列。该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为基准将所要査找的序列分为左右两部分。接下来根据所要査找序列的升降序规律及中间元素与所查找元素的大小关系,来选择所要査找元素可能存在的那部分序列,对其采用同样的方法进行査找,直至能够确定所要查找的元素是否存在,具体的使用方法可通过下面的代码具体了解。

     1 #include <stdio.h>
     2 binarySearch(int a[], int n, int key){
     3     int low = 0;
     4     int high = n - 1;
     5     while(low<= high){
     6         int mid = (low + high)/2;
     7         int midVal = a[mid];
     8         if(midVal<key)
     9             low = mid + 1;
    10         else if(midVal>key)
    11             high = mid - 1;
    12         else
    13             return mid;
    14     }
    15     return -1;
    16 }
    17 int main(){
    18     int i, val, ret;
    19     int a[8]={-32, 12, 16, 24, 36, 45, 59, 98};
    20     for(i=0; i<8; i++)
    21         printf("%d	", a[i]);
    22     printf("
    请输人所要查找的元素:");
    23     scanf("%d",&val);
    24     ret = binarySearch(a,8,val);
    25     if(-1 == ret)
    26         printf("查找失败 
    ");
    27     else
    28         printf ("查找成功 
    ");
    29     return 0;
    30 }

    运行结果:

    -32    12    16    24    36    45    59    98
    请输入所要查找的元素:12
    查找成功

    在上面的代码中,我们成功地通过二分査找算法实现了查找功能,其实现过程如下图所示。

    在如上图所示的查找过程中,先将序列中间位置的元素与所要査找的元素进行比较,发现要査找的元素位干该位置的左部分序列中。接下来将mid的左边一个元素作为 high,继续进行二分査找,这时mid所对应的中间元素刚好是所要査找的元素,査找结束,返回査找元素所对应的下标。在main函数中通过返回值来判断査找是否成功,如果査找成功.就打印输出“査找成功”的信息,否则输出“査找失畋”的信息。

  • 相关阅读:
    Nagios 监控网络流量(Windows主机和交换机)
    Nagios监控Windows服务器(NSClient++安装与应用)
    Mysql源码安装
    NETSNMP配置
    Linux 下文件解压
    cacti没有图像 排错
    菜鸟写游戏外挂
    什么是IDOC,以及IDOC的步骤
    后台跑程序(仿SM36)
    smartforms参数
  • 原文地址:https://www.cnblogs.com/oumygade/p/4313615.html
Copyright © 2020-2023  润新知