数据结构与算法之折半查找

简介: 数据结构与算法之折半查找


订阅专栏

  活动地址:CSDN21天学习挑战赛

作者简介:大家好我是小唐同学(๑>؂<๑),为梦想而奋斗的小唐,让我们一起加油!!!

个人主页:小唐同学(๑>؂<๑)的博客主页

系列专栏:数据结构

博友们如果也是新手入门数据结构我希望大家可以多加练习 数据结构题库在牛客网就有已经给大家附上链接,可以直接点击跳转:刷题点这里

牛客网支持ACM模式哦,刷算法题也很推荐哦!!!

下面上文章------》

目录

折半查找概念:

折半查找步骤:

1.输入:

2.输出

算法思想:

算法图解:

代码实现:

时间复杂度分析:

  (1)最坏情况:

  (2)最好情况:

  (3)平均情况:

空间复杂度:


折半查找概念:

折半查找也称为二分查找,是一种效率比较高的查找算法,但是这是在该序列已经有序的状态下,因为该算法的核心思想就是缩小搜索区间,也要保持在元素不遗漏的状态下。

折半查找步骤:

1.输入:

(1)n个数(有序数列--升序)

(2)待查找元素

2.输出

查找成功:返回该元素在有序数列中的下标

查找失败:返回-1或自定义失败的标识

算法思想:

核心思想就是不断缩小搜索范围,在缩小范围时你会遇到三种情况

1.与目标值相等:直接返回对应下标,结束

2.比目标值大:因为数列有序 则中值元素在目标值的后边,搜索区间减半(在左一半),再算出减半后的区间的中值进行比较,以此类推。

3.比目标值小:由于元素有序,则中值元素在目标值的前边,搜索区间减半(在右一半),再算出减半后的区间的中值进行比较,以此类推。

如果区间两端点重合且端点值不相等则表示查找失败。

算法图解:

图片来自《数据结构简明教程》

第一次查找:mid坐标为4,对应元素为10,大于7,则区间变为左一半:[0,3];

第二次查找:mid坐标为1,对应元素为1,小于7,则区间变为右一半:[0,3];

第三次查找:mid坐标为2,对应元素为7,等7,返回下标:mid+1=3;

代码实现:

# include <stdio.h>
 int main()
 {
 int a[7]; 
 int n;
 printf("请输入要查找的元素"); 
 scanf("%d",&n);
 printf("请输入数组元素");
 for(int i=0;i<7;i++)
 {
  scanf("%d",&a[i]);
 }
 //存储变化的区间右端点 
 int r=6;
  //存储变化的区间左端点 
  int l=0; 
 int mid;
  while(l<=r)
  {
    mid=(r+l)/2;
    if(a[mid]==n)
    {
      printf("%d",mid);
      return mid;
    }
    if(a[mid]<n)
    {
      l=mid+1;
    }
    if(a[mid]>n)
    {
      r=mid-1;
    }
  }
 return -1; 
 }

时间复杂度分析:

  (1)最坏情况:

最后一次才找到 设次数为t 因为每次缩小1/2    所以2^t=n;

则t=㏒₂n   则时间复杂度相当于对数级别O(㏒₂n )

  (2)最好情况:

一次找到,则时间复杂度为常数级别O(1);

  (3)平均情况:

综合则二分查找时间复杂度为O(㏒₂n )。

空间复杂度:

因为只需要几个固定变量则空间复杂度为常数级:O(1)。


相关文章
|
算法 Java
折半查找算法[二分查找法]算法的实现和解决整数溢出问题~
折半查找算法[二分查找法]算法的实现和解决整数溢出问题~
|
存储 算法
【查找算法】折半查找法
【查找算法】折半查找法
|
11天前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
13 0
|
5月前
|
存储 算法
【数据结构】— —查找(折半查找,二叉排序树)
【数据结构】— —查找(折半查找,二叉排序树)
【数据结构】— —查找(折半查找,二叉排序树)
|
算法 C语言
C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n-2
第一步: (1). 设置初始数组:int arr[]。 (2). 生成相关变量: int n = 0; -- 存放从键盘输入的要查找的值; int i = 0; -- 循环变量;
|
5月前
|
算法
【408数据结构与算法】—折半插入排序(十六)
【408数据结构与算法】—折半插入排序(十六)
|
11月前
|
算法 C语言
C语言-折半查找(二分查找)算法详解
C语言-折半查找(二分查找)算法详解
154 0
|
12月前
|
搜索推荐 算法
深入浅出排序算法之直接插入排序(拓展:折半插入排序)
深入浅出排序算法之直接插入排序(拓展:折半插入排序)