美文网首页
静态查找_顺序查找&二分查找

静态查找_顺序查找&二分查找

作者: Mad_Elliot | 来源:发表于2019-02-25 13:32 被阅读0次

    查找基本概念:查询特定元素是否在表中的过程,存在则输出该元素位置,不存在则输出失败标志。
    静态查找:只查找,不改变表中数据。
    动态查找:既查找,又改变。

    顺序查找:(线性查找)

    从顺序表的一端开始往后比较,找到返回表中位置,找不到返回-1。

    //while循环
    static int SeqSearch1(int[] a, int x)
    {
        int i = 0;
        while (i < a.Length && a[i] != x)
            i++;
        if (i < a.Length && a[i] == x) return i;
        else return -1;
    }
    //for循环
    static int SeqSearch2(int[] a, int x)
    {
        for (int i = 0; i < a.Length; i++)
        {
            if (a[i] == x)
            {
                return i;
            }
        }
        return -1;
    }
    

    总结:
    1、算法简单,且对顺序结构或链表结构均适用;
    2、时间效率:O(n),效率太低。


    二分查找:(折半查找)

    基本思想:在一个排好序的表中,将要找的key与正中元素相比,若key小,则缩小至前半部内查找;再取其中值比较,每次缩小1/2的范围,直到查找成功或失败为止。

    static int BinarySearch(int[] a, int x)
    {
        int low = 0;//首坐标
        int high = a.Length - 1;//尾坐标
        int mid;//中坐标
        while (low <= high)
        {
            mid = (low + high) / 2;
            if (a[mid] == x)
                return mid;
    
            if (a[mid] > x)//x小于中间值,x位于前半段[low, mid-1]中
                high = mid - 1;
            else
                low = mid + 1;
        }
        return -1;
    }
    

    总结:
    1、查找本身的时间效率很高O(nlog2n),但排序本身是一种费时的运算;
    2、二分查找只使用于顺序表,且是有序的顺序表,链表无法实现二分查找
    3、二分查找特别使用于那种一经建立就很少改动,而又经常需要查找的线性表。

    相关文章

      网友评论

          本文标题:静态查找_顺序查找&二分查找

          本文链接:https://www.haomeiwen.com/subject/lyvveqtx.html