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

     1 #include <iostream>  
     2 using namespace std;  
     3 typedef int KeyType;  
     4   
     5 /************************************************************************/  
     6 /* 二分查找方法        (数组必需要是有序的)                           */  
     7 /* a[]为待查找的数组,要求是有序的;n为数组的长度;k为查找的关键字        */  
     8 /************************************************************************/  
     9 int BinSearch(KeyType a[],int n,KeyType k)  
    10 {  
    11     int low=0,high=n-1,mid;                //取两端  
    12     while (low<=high)                        
    13     {  
    14         mid=(low+high)/2;                  //二分取中间位置  
    15         if (a[mid]==k)  
    16         {  
    17             return mid;  
    18         }  
    19         else if (a[mid]>k)  
    20         {  
    21             high=mid-1;  
    22         }  
    23         else  
    24         {  
    25             low=mid+1;  
    26         }  
    27     }  
    28     return -1;  
    29 }  
    30   
    31 /************************************************************************/  
    32 /* 主函数                                                               */  
    33 /************************************************************************/  
    34 int main()  
    35 {  
    36     int a[50],i,n,k;  
    37     cout<<"待查找数组的个数: ";  
    38     cin>>n;  
    39     cout<<"待查找数组的元素: ";  
    40     for (i=0;i<n;i++)  
    41     {  
    42         cin>>a[i];  
    43     }  
    44     cout<<"要查找的元素:     ";  
    45     cin>>k;  
    46     i=BinSearch(a,n,k);  
    47     if (i==-1)  
    48     {  
    49         cout<<"查找不到你所要查找的。"<<endl;  
    50     }  
    51     else  
    52     {  
    53         cout<<"所要查找元素位于第"<<i+1<<"个。"<<endl;  
    54     }     
    55     return 0;  
    56 }  

    二分查找又称折半查找,它是一种效率较高的查找方法。

      【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列

      【优缺点】折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。

      【算法思想】首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。

      重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

  • 相关阅读:
    NET导入Excel带进度条。
    直接拿来用,最火的.NET开源项目(beta)
    Darren Ji
    接口和抽象类有什么区别
    wpf博客
    jQuery动态改变图片显示大小(修改版)
    S32K的make过程
    TortoiseGit安装及使用
    Python:tkinter
    GCC学习笔记(二):编译选项
  • 原文地址:https://www.cnblogs.com/zhxiang/p/2982325.html
Copyright © 2011-2022 走看看