zoukankan      html  css  js  c++  java
  • 各种查找算法

    一、顺序查找

    顺序查找比较简单,这里就不用代码实现了,其原理就是按顺序比较每个元素,直到找到关键字。

    其时间复杂度为O(n).

    二、二分查找(折半查找)

    原理是:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;

    如果要查找的元素大于中间元素,则从数组大于中间元素的那一半查找;如果小于中间元素,则从小于中间元素的那一半查找;否则就是没有找到。

    时间复杂度为O(logn).

    代码如下:

     1 int binary_search(int *a,int len,int key)
     2 {
     3     int low=0 4     int high=len-1;
     5     while(low<=high)
     6     {
     7         int mid=(low+high)/2;
     8         if(a[mid]==key)
     9         {
    10             return mid;
    11         }
    12         //在左边找
    13         else if(a[mid]>key)
    14         {
    15             high=mid-1;
    16         }
    17         //在右边找
    18         else if(a[mid]<key)
    19         {
    20             low=mid+1;
    21         }
    22         //没找到该值
    23         else 
    24             return -1;
    25     }
    26 }

    三、二叉排序树查找


    使用条件:先创建二叉排序树:

    1.若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值。

    2.若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。

    3.它的左、右子树也分别为二叉排序树。

    算法原理:

    在二叉排序树b中查找key的过程如下:

    1.若b是空树,则搜索失败,否则:

    2.若key等于b的根节点的数据域的值,则查找成功;否则

    3.若key小于b的根节点的数据域的值,则查找左子树;否则

    4.查找右子树。

    时间复杂度为:O(log2(n)).

    代码将在下篇博客中实现。

  • 相关阅读:
    三国演义中的十大谎言 VS 程序员十大口头禅
    Node.js 的单线程事件驱动模型和内置的线程池模型
    为了让医院把医护还给患者,他们用了这个…
    华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?
    brew
    Python
    Python
    Python
    AtCoder Beginner Contest 215 (个人题解 A~F)
    AcWing 第 13 场周赛  补题记录
  • 原文地址:https://www.cnblogs.com/sdutmyj/p/4547100.html
Copyright © 2011-2022 走看看