zoukankan      html  css  js  c++  java
  • 数据结构之折半查找

    数据结构之--折半查找

    定义:折半查找技术,也就是二分查找。它的前提是线性表中的记录必须是关键码有序(通常从大到小有序),线性表必须采用顺序存储。折半查找的基本思想是:取中间记录作为比较对象,若给定值与中间记录的关键字,则在中间记录的关键字相等,则查找成功;若给定值小于中间记录的作伴去继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

    图解

    时间复杂度:由于具有n个节点的完全二叉树的深度为⌊log₂n⌋+1,尽管折半查找判定二叉树并不是完全二叉树,但同样相同的推导可以得出,最坏的情况查找到关键字或者查找失败的次数为⌊log₂n⌋+1。因此我们折半算法的时间复杂度为:O(logn),它显然远远好于顺序查找的O(n)的时间复杂度了。

    #include<stdio.h>

    int Binary_Search(int *a,int n,int key){

      int low,mid,high;

      low = 1;                      /*定义最低下表为记录首位*/

      high = n;                      /*定义最高下表为记录末位*/

      while(low<=high){

        mid=(low+high)/2;              /*折半*/

        if(key<a[mid])                 /*若查找值比中值小*/

          high=mid-1;                /*最高下标调整到中位下标小一位*/

        else if(key>a[mid])                ​/*若查找值比中值大*/

          low=mid+1;                  ​/*最低下标调整到中值位下标大一位*/

        else

          return mid;                   ​/*若相等说明mid即为查找到的位置*/

      }

      return 0;

    }

    void main(){

      int num[] = {0,1,16,24,35,47,59,62,73,88,99};

      int result = Binary_Search(num,sizeof(num)/sizeof(num[0])-1,62);

      printf("查找结果为:%d ",result);

    }

    运行结果为: 

     

  • 相关阅读:
    js json字符串与json对象互相转换(最全)
    eclipse 离线安装SVN插件(支持eclipse201909)
    eclipse maven项目如何将所有的jar包复制到lib目录下?
    windows/tomcat 修改java虚拟机JVM以utf-8字符集加载class文件的两种方式
    eclipse 设置所有文件编码为UTF-8(最全)
    控制程序的启动数量(限制游戏多开)
    POJ 1719 Shooting Contest(二分图匹配)
    微信企业号开发:消息类型与差别
    Android
    SSI(Server Side Include)简单介绍
  • 原文地址:https://www.cnblogs.com/zhengjunfei/p/4713575.html
Copyright © 2011-2022 走看看