zoukankan      html  css  js  c++  java
  • 折半查找法的温习

    折半查找法适合于1采用顺序存储结构的2必须按照关键字大小排序的序列查找

    如代码所示:

     1 #include <stdio.h>
     2 
     3 int BinSearch(int a[], int length, int k)
     4 {
     5     int low = 0, high = length - 1;
     6     int mid;
     7     while(low <= high)
     8     {
     9         mid = (low + high) / 2;
    10         if(a[mid] == k)
    11             return mid;
    12         else if(a[mid] > k)
    13             high = mid - 1
    14         else
    15             low = mid + 1;
    16     }
    17     return 0;
    18 }
    19 
    20 int main()
    21 {
    22     int a[8] = {2, 3, 4, 5, 6, 7, 8, 10};
    23     printf("元素5的位置在 :%d
    ", BinSearch(a, 8, 5));
    24 }

    折半查找法的基本思路是设置low,high, mid三个变量。如代码所示,就是通过不断的改变这3个变量来查找是否存在查找值K,如存在返回它所在的位置,如不存在,返回0

    折半查找法的优点是比较次数比顺序查找少,但缺点是必须是要对已排序号的序列查找。

    一般的在考试中,不要考折半查找法的代码。只会考折折半查找法的查找成功时的平均查找长度或者查找不成功时候的平均查找长度。

    其中具体的做法是 画一个完全二叉排序树,数每一层有几个元素,各自乘以层数,求和。再除以元素个数。得到查找成功的平均查找长度。

    查找不成功的平均查找长度就是 用虚线 把空出来的 位置补齐(最后一层的需要再一层)。然后对虚线求查找长度就行。

  • 相关阅读:
    常见树的总结
    《深入理解Java虚拟机》读书笔记(第三章)
    《Jave并发编程的艺术》学习笔记(1-2章)
    Java多线程与并发之面试常问题
    Morris遍历-如何用空间复杂度O(1)来遍历二叉树
    BFPRT算法
    Manacher
    maven基础
    play framework + sbt入门之环境搭建
    rancher部署kubernets集群
  • 原文地址:https://www.cnblogs.com/hello-lijj/p/7239005.html
Copyright © 2011-2022 走看看