zoukankan      html  css  js  c++  java
  • 每天进步一点点之查找

    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)

        比较次数:

          

  • 相关阅读:
    9月9日刷题
    7-4日刷题
    7-3日刷题
    7-2日刷题
    The Key To Accelerating Your Coding Skills
    初识机器学习
    python数据分析与量化交易
    部署远程jupyter
    SQLserver2008一对多,多行数据显示在一行
    kvm虚拟化
  • 原文地址:https://www.cnblogs.com/lixiangfu/p/13339792.html
Copyright © 2011-2022 走看看