• 关于查询 (顺序查询与二分查询)


    1.     问题

    写出两种检索算法:在一个排好序的数组T[1..n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出j=0

    2.     解析

    这个问题很好想到暴力,就是一个一个查找过去,这个可以用于顺序表存储得到数组,也可以用于链表存储的链表。

    同时观察一下这是一个排好序的数组,那么我们也能很容易的想到二分查找,对于每一次的查找,都对半,去找中间的值,如果所要查找的x比我所得的中间值,要小,我就将右边界缩小,如果相等,就退出,如果大,就将左边界扩大,持续下去,直到找到,或者左边界的值要比右边界的值大时(说明没找到)就退出。

    3.     设计

    顺序查找的伪代码:

               for(i=1;i<len;i++){

                   if(a[i]==x){

                       print(i)

                       break;

                   }

               }

    二分查找的伪代码:

               l=1,r=n;

               while(l<=n){

                   mid= (l+r)/2

                   if(a[mid]==x){

                       printf(mid);

                       break;

                   }

                   if(a[mid]<x){

                       l=mid+1

                   }

                   else r=mid-1

               }    

    4.     分析

    顺序查找的时间复杂度为O(n),二分查找的时间复杂度为O(logn).

    5.     源码

    kitalekita/binary_search.cpp at main · kitalekita/kitalekita (github.com)

    kitalekita/brute_search.cpp at main · kitalekita/kitalekita (github.com)

  • 相关阅读:
    文件系统
    用户
    Kali Linux命令(3)
    Kali Linux命令(2)
    Kali Linux命令(1)
    文件上传测试 bugku
    Seay源代码审计系统
    实验吧 BrainFuck
    zigbee学习之路(十一):看门狗
    zigbee学习之路(十):串口(接收)
  • 原文地址:https://www.cnblogs.com/kitalekita/p/14587846.html
Copyright © 2020-2023  润新知