• 每天进步一点点之查找


    1,顺序查找

    #include <bits/stdc++.h>
    using namespace std;
    #define MaxSize 100
    struct ElementType{
        string name;
        int age;
    };
    typedef struct Node* List;
    struct Node{
        ElementType Data[MaxSize];
        int length;
    };
    bool equal(ElementType a1, ElementType a2){
        if(a1.age==a2.age && a1.name == a2.name)
            return true;
        return false;
    }
    int SequentialSearch(List Tb1,ElementType K){
        int i;
        Tb1->Data[0]=K;
        for(i=Tb1->length;!equal(Tb1->Data[i],K);i--);
        return i;//成功返回下标,不成功返回0
    }

      a,设立哨兵的好处:不用判断下标是否越界。

    2,二分查找

    int BinarySearch(List Tbl,ElementType K){
        //表Tbl中查找K的元素,默认表中元素升序排列 
        int left,right,mid,NoFound=-1;
        left=1;//因为0位是哨兵 
        right=Tbl->length;
        while(left<=right){
            mid=(left+right)/2;
            if(K<Tbl->Data[mid]) right=mid-1;  
            else if(K>Tbl->Data[mid]) left = mid+1;  
            else return mid;
        }
        return NotFound;// not found 
    }

      a,要求是数组和有序

      b,时间复杂度是log(n)

      b,比较次数:

        每次比较mid的值和查找的值后,如果不相等,mid会被加1或者-1然后赋值给right(left)。

        不成功时:

          mid=right=left(而不是right和left相差1)

        比较次数:

          

  • 相关阅读:
    GoLang设计模式04
    GoLang设计模式03
    GoLang设计模式02
    GoLang设计模式01
    封装python代码,避免被轻易反编译
    openEuler 欧拉安装图形界面
    Deepin
    Debian安装PostgreSQL
    在 Linux 上使用 VirtualBox 的命令行管理界面
    Debian无法通过ssh连接
  • 原文地址:https://www.cnblogs.com/lixiangfu/p/13339792.html
Copyright © 2020-2023  润新知