查找方式:依次查找与二分查找

简介: 查找方式:依次查找与二分查找

1.依次查找与二分查找的基本概念

1.1什么是依次查找?

故名思意,依次查找指的是对于任意一个序列,从一端开始,顺序扫描,依次将扫描到的结点关键字与给定值k进行比对,条件符合者选出,不符者略过的一种查找方法

1.2什么是二分查找?

二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,有点类似分治的思想。二分查找针对的是一个有序的数据集合,每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。

2.两种查找方式的各自优劣

无论是哪种查找方式,都有其优劣性,并不能说谁好谁坏,只能说某一种情况下谁好一些,谁不适用一些

2.1依次查找优劣:

1.适用范围:任何数组都可以使用这个方法,适用范围大

2.运算效率:电脑运算量不可减免,运算效率一般

2.2二分查找优劣:

1.适用范围:使用的前提条件是有序数组,适用范围有限

2.运算效率:一旦适用,大大减少电脑运算量,提升运算效率

3.两种代码的实现示例

依次查找代码示例

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
  int arr[] = { 2,4,3,5,7,6,1,9,8 };
  int input = scanf("%d", &input);
  int sz = sizeof(arr) / sizeof(arr[0]);
  int i = 0;
  int find = 0;
  for (i = 0; i < sz; i++)
  {
    if (input == arr[i])
    {
      printf("找到了,查找数字的下标是%d", i);
      find = 1;
      break;
    }
  }
  if (find == 0)
    printf("您查找的数字没有找到");
  return 0;
}

二分查找代码示例

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
  int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  int sz = sizeof(arr) / sizeof(arr[0]);
  int left = 0;
  int right = sz - 1;
  int input = 0;
    scanf("%d", &input);//这里需要注意,scanf有返回值,不可以写成“int input =     scanff("%d",&input);
  int find = 0;
  while (left<=right)
  {
    int mind = (left + right) / 2;
    if (input > arr[mind])
      left = mind + 1;
    else if (input < arr[mind])
      right = mind - 1;
    else if (input == arr[mind])
    {
      printf("找到了,下标是%d", mind);
        find = 1;
      break;
    }
  }
  if (find == 0)
    printf("没有找到\n");
  return 0;
}

4.有趣思维

上述二分查找的确数字较小时候可以使用,但是一但上升的超过int max值的时候呢?

由vs转到定义我们可以知道int类型的上限

或许你可能想到了,我直接把int 类型换成longlong类型不就可以扩大max值了吗,以此来扩大数组大小。。。

首先,这个把int改longlong方法的确可以,不过还有一种比较好的数学思维

下面来简要介绍一下这种处理方法:

1.为了便于大家理解,我们用数学方式求均值来进行呈现:

一般的数学思维:(a+b)/2

高端的数学思维(假设a<b):(b-a)/2+a

2.柱状图来理解两者求均值的方法

因此,我们可以把这个代码

给他改成

int mind = ( right - left )/ 2 + left

这样就一定程度上扩大了该代码的应用范围,不至于在较大数字运算时超过int max值造成电脑计算错误。

最后,如果存在错误,希望各位多多指正啦~明天会更好!

相关文章
|
算法
查找
查找是指在图中寻找特定的节点或边的过程。在图中进行查找操作可以帮助我们找到与目标节点或边相关的信息,或者判断图中是否存在某个节点或边。 在图中进行查找操作的常见算法有: 1. 深度优先搜索(DFS):从图中的一个节点开始,沿着一条路径一直深入直到无法再深入为止,然后回溯到上一个节点,继续深入其他路径,直到找到目标节点或遍历完所有节点。 2. 广度优先搜索(BFS):从图中的一个节点开始,先访问它的所有邻居节点,然后再依次访问邻居的邻居节点,直到找到目标节点或遍历完所有节点。 3. Dijkstra算法:用于在带权有向图中找到从一个节点到其他节点的最短路径。该算法通过不断更新节点的最短距离来逐步
104 0
|
10月前
排序和查找
排序和查找
67 0
|
存储 算法
数组算法:倒置,查找,插入,删除
数组算法:倒置,查找,插入,删除
99 0
二叉排序树的建立、查找、插入、删除
二叉排序树的建立、查找、插入、删除
|
搜索推荐
查找-之二叉排序树(查找、插入、删除)
有序的线性表采用:折半/二分、插值、斐波那契查找相比顺序查找效率得到提高,但是在插入和删除时效率低(为维持数据的有序性) 在高效实现查找操作时,如何提高插入和删除的效率? 在一些应用场景:在查找时需要插入和删除
201 0
查找-之二叉排序树(查找、插入、删除)
|
存储 算法
查找-之有序表查找
待查找的表是有序排列的
130 0
查找-之有序表查找
|
算法
【刷题记录】34. 在排序数组中查找元素的第一个和最后一个位置
【刷题记录】34. 在排序数组中查找元素的第一个和最后一个位置
149 0
【刷题记录】34. 在排序数组中查找元素的第一个和最后一个位置
|
存储 机器学习/深度学习 算法
如何更快速地查找
查找算法在计算机程序设计中占据着主要的核心位置,查找算法的效率直接影响着计算机程序设计与开发的结果与速度。本章主要会讲到顺序查找、二分查找、索引查找和哈希查找这四种查找算法以及效率分析。掌握了相关查找算法,不管是在代码编程计算机技术上面,还在日常生活中都会有很大的用处。
290 0