• 各种查找算法


    一、顺序查找

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

    其时间复杂度为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)).

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

  • 相关阅读:
    49 我素故我在
    91 棋盘游戏
    55 删除数组重复元素
    54 删除数组元素
    C++虚函数, 纯虚函数
    iOS-OC-多态
    C++函数引用形参和非引用形参
    怎么清理Mac 硬盘里的其他
    Vue.js中this.$nextTick()的使用
    data中有嵌套,取值要链式取
  • 原文地址:https://www.cnblogs.com/sdutmyj/p/4547100.html
Copyright © 2020-2023  润新知