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

        在查找数据的时候除了暴力查找外,还可可以使用二分法查找,二分法查找又叫折半查找。二分法在查找的时候效率是比较高的,但是它有

    局限性,就是仅适用于顺序表,不管是升序还是降序都适用。原理就是取顺序表的中间那个元素mid,然后用中间的元素mid和待查找元素x进

    行比较大小,以此改变下次的查找区间,使得下次的查找区间缩短一半,所以它又叫折半查找,这样就可节省一半的时间,极大的提高了效率。

        在百度上找了张二分法查找的图,看一下具体是怎么实现的,上图

        然后再用代码来实现,上代码

     1 #include<iostream>
     2 using namespace std;
     3 
     4 int binarySearch(int a[],int x,int N)   //二分查找;x为待查找元素,N为有序表大小
     5 {  //a虽然为顺序表,但可能是升序,也可能是降序,所以要两种情况;通过比较首尾元素大小即可
     6     if(a[0]<a[N-1])      //此顺序表是升序     
     7     {
     8        int left=0,right=N-1,mid;
     9        while(left<=right)
    10        {
    11            mid=(left+right)/2;
    12            if(x==a[mid]) 
    13                  return  mid;  //查找成功返回就返回索引
    14            else if(x<a[mid])
    15                  right=mid-1;
    16            else
    17                  left=mid+1;
    18         }
    19     }
    20     else   //此顺序表为降序
    21     {
    22         int left=0,right=N-1,mid;
    23        while(left<=right)
    24        {
    25            mid=(left+right)/2;
    26            if(x==a[mid]) 
    27                  return  mid;  //查找成功返回就返回索引
    28            else if(x>a[mid])
    29                  right=mid-1;
    30            else
    31                  left=mid+1;
    32         }
    33     }
    34     return -1;  //查找失败
    35 }
    36 int main()
    37 {
    38     int index;
    39     int a[10]={1,2,3,4,5,6,7,8,9,10};
    40     int b[10]={10,9,8,7,6,5,4,3,2,1};
    41     index=binarySearch(a,5,10);
    42     if(index==-1)
    43         cout<<"查找失败"<<endl;
    44     else
    45         cout<<"查找成功,结果为:"<<a[index]<<"   索引为:"<<index<<endl;
    46     index=binarySearch(b,5,10);
    47     if(index==-1)
    48         cout<<"查找失败"<<endl;
    49     else
    50         cout<<"查找成功,结果为:"<<b[index]<<"   索引为:"<<index<<endl;
    51     return 0;
    52 }

    代码测试过了,结果如下:

  • 相关阅读:
    信息安全系统设计基础第九周学习总结
    信息安全程序设计基础第五周学习总结
    信息安全程序设计基础第二周学习总结
    信息安全程序设计基础第三周总结
    ubuntu 13.10安装jdk 1.7 owen
    vim的配置文件 owen
    程序的思想是相通的,语言只是一种手段 owen
    如何删除开机系统选择 owen
    easybcd添加或删除启动选项 owen
    星际译王词库 owen
  • 原文地址:https://www.cnblogs.com/buanxu/p/12804906.html
Copyright © 2011-2022 走看看