• 二分查找


     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.必须按关键字大小有序排列

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

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

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

  • 相关阅读:
    Force.com微信开发系列(二)用户消息处理
    Force.com微信开发系列(一) 后台配置
    【Android开发】之Fragment与Acitvity通信
    【Android开发】之Fragment重要函数讲解
    【Android开发】之Fragment生命周期
    【Android开发】之Fragment开发1
    【Android开发】之MediaPlayer的错误分析
    【Andorid开发框架学习】之Mina开发之服务器开发
    【Andorid开发框架学习】之Mina开发之客户端开发
    【Andorid开发框架学习】之Mina开发之Mina简介
  • 原文地址:https://www.cnblogs.com/zhxiang/p/2982325.html
Copyright © 2020-2023  润新知