使用二分查找特定关键字元素

STM32 CubeMX实战:手把手教你用I2C驱动IST8310磁力计(附完整代码) 本文详细介绍了如何使用STM32 CubeMX和I2C驱动IST8310磁力计,从硬件连接到代码实现的完整流程。重点讲解了I2C通信异常处理、传感器初始化序列优化以及中断驱动数据采集方案,帮助开发者快速搭建可靠的地磁场数据采集系统。 阅读详情

1 题目

功能:二分查找

描述: 使用二分查找特定关键字元素 用户输入有序数组的关键字后,给定要查找的关键字,看是否存在于有序数组中

2 思路

二分査找就是折半查找

其基本思想:首先选取表中间位置的记录,将其关键字与给定关键字key进行比较,若相等,则査找成功; 若key值比该关键字值大,则要找的元素一定在右子表中,则继续对右子表进行折半査找; 若key值比该关键字值小,则要找的元素一定在左子表中,继续对左子表进行折半査找; 按照上述递推,直到查找成功或查找失败。

3 代码

#include <stdio.h> 
#include <stdlib.h>
​
/**
功能:二分查找
描述:
  使用二分查找特定关键字元素
  用户输入有序数组的关键字后,给定要查找的关键字,看是否存在于有序数组中
**/
​
void binary_search(int key, int a[], int n) { // 自定义函数binary_search
    int low, high, mid, count = 0, count1 = 0;
    low = 0;
    high = n - 1;
    while (low < high) {              // 当查找范围不为0时执行循环体语句
    
        count++;                // count记录查找次数
        mid = (low + high) / 2;           // 求出中间位置
        if (key < a[mid])             // 当key小于中间值
            high = mid - 1;           // 确定左子表范围
        else if (key > a[mid])            // 当key大于中间值
            low = mid + 1;              // 确定右子表范围
        else if (key == a[mid]) {         // 当key等于中间值证明查找成功
        
            printf("查找成功!\n查找 %d 次!a[%d]=%d", count, mid, key);
                      // 输出查找次数及所查找元素在数组中的位置
            count1++;             // count1记录查找成功次数
            break;
        }
    }
    if (count1 == 0)                // 判断是否查找失败
        printf("查找失败!");              // 查找失败输出no found
}
​
int main(int argc, char const *argv[]) { 
    int i, key, a[100], n;
    printf("请输入数组的长度:\n");
    scanf("%d", &n);                // 输入数组元素个数
    printf("请输入数组元素:\n");
    for (i = 0; i < n; i++)
        scanf("%d", &a[i]);             // 输入有序数列到数组a中
    printf("请输入你想查找的元素:\n");
    scanf("%d", &key);                // 输入要查找的关键字
    binary_search(key, a, n);           // 调用自定义函数
  printf("\n");
}

示例结果:

$ gcc ex064.c -o demo
$ ./demo
请输入数组的长度:
10
请输入数组元素:
1
4
6
9
12
46
78
90
102
122
请输入你想查找的元素:
102
查找成功!
查找 3 次!a[8]=102
关键字有序序列中采用二分查找法查找关键字为给定值k的元素,输出查找结果。 要求:有序序列和给定值k都从键盘输入。 关键字有序序列中采用二分查找法查找关键字为给定值k的元素,输出查找结果。 要求:有序序列和给定值k都从键盘输入。 运行结果:略 阅读详情

相关推荐

【C语言】二分查找。给定一个有序的数列,查找指定的数值。如果查询到该数值,则返回该数值在数组中的位置。

二分查找。给定一个有序的数列,查找指定的数值。如果查询到该数值,则返回该数值在数组中的位置。 要求:利用数组初始化方法给各数组元素赋值,数组长度为10;输入一个整数x,利用二分查找法查询整数x在数组中的位置,如果查询到则输出x在数组中的位置,如果未查询到,输出“Not Found”。 【输入输出样例1】(数组初始值为1 2 3 4 5 6 7 8 9 10) 8 Index is 7(输出结束换行,数值后无空格) 【输入输出样例2】(数组初始值为1 2 3 4 5 6 7 8 9 10) 12 Not Fo

xiamuandsansan的博客 3887

算法-二分查找(上)

1、二分查找二分查找针对的是一个有序的数据集合,查找思想有点类似分治思想。每次都通过跟区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为 0。 2、二分查找是一种非常高效的查找算法,高效到什么程度呢?我们来分析一下它的时间复杂度, O(logn) 惊人的查找速度。 3、我们假设数据大小是 n,每次查找后数据都会缩小为原来的一半,也就是会除以 2。最坏情况下,直到查找区间被缩小为空,才停止。 其中 n/2k=1 时,k 的值就是总共缩小的次数...

Java开发者Peng博客 579

“守望先锋”网络同步分析

守望先锋”(Overwatch)是一款由暴雪娱乐开发的团队基础第一人称射击游戏(FPS),于2016年正式发布。游戏以其独特的角色设计、丰富的游戏模式和高度的团队合作性而受到广泛欢迎。类型:第一人称射击(FPS)/多人在线战斗竞技场(MOBA元素)平台玩家人数:每场比赛由两个六人队伍组成,共12名玩家。客户端/服务器模型:在这种模型中,客户端负责处理用户输入和表现逻辑,而服务器则负责游戏的核心逻辑和状态管理。客户端与服务器之间通过网络进行通信,确保游戏状态的一致性。强同步机制。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 330

数据结构算法-15-二分查找

前面学习了六种排序算法,接着学习搜索,搜索中使用最多一种简单查找方法就是二分查找二分查找的特点是,先保证数列是有序排序,然后每次查找可以减少一半的范围,直到查到或者找不到目标元素为止。这个也是经常在面试中被要求手写这个查找代码,接着要你设计测试用例去测试你写的代码。 1.二分查找定义 二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好。其缺点就是要求待查表为有序表,且插入删...

Anthony_tester的博客 1659

20.二分查找

1.分清指针的边界值意义,采用两种不同的边界值指针进行二分搜索 二分查找适合有序数组的查找,每次与数组的中间元素对比,小的话,左半部分查找,大的话右半部分查找 public class BinarySearch<T extends Comparable> { /** * 二分查找 * @param arr * @param n ...

cl723401的博客 203

二分查找法的元素查找次数求解

//题目如下://一个长度为20的有序表,采用二分查找进行查找,共有几个元素查找长度为3?/* 10 / \ / \ / \ / \ / \ 5 15 / \

hgdwlsh的专栏 4850

二分查找

简介 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素关键字有序排列。 查找过程 在一组有序的顺序表中查找某个元素,比如是升序的数组,先比较该数组中间的值和元素大小关系,若数组中间的值大于元素,则下一次查找仅需要查找数组的前半段,若数组中间的值小于元素,则下一次查找仅需要查找数组的后半段,若数组中间的...

w8827130的博客 866

8621 二分查找

编写Search_Bin函数,实现在一个递增有序数组ST中采用折半查找法确定元素位置的算法.

Caitlin_lee_的博客 428

在Python中实现二分查找法的递归

1 问题如何在Python中实现二分查找法的递归?2 方法二分查找法又称折半查找法,用于预排序列表的查找问题。要在排序列表alist中查找元素t,首先,将列表alist中间位置的项与查找关键字t比较,如果两者相等,则查找成功;否则利用中间项将列表分成前、后两个子表,如果中间位置项目大于t,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,即查找成功;或者直到子表不...

算法与编程之美 1073

数据结构实验之查找四:二分查找

Problem Description 在一个给定的无重复元素的递增序列里,查找与给定关键字相同的元素,若存在则输出找到的位置,不存在输出-1。 Input 一组输入数据,输入数据第一行首先输入两个正整数n ( n 随后m行输入m个待查找的关键字key Output 若在给定的序列中能够找到与关键字key相等的元素,则输出位序(序号从0开始),否则输出-1。

b_dxac的博客 628

第十四天、二分查找

题目:采用二分查找法查找特定关键字元素。要求用户输入数组长度,也就是有序表的数据长度,并输入数组元素和查找的关键字。程序输出查找成功与否,以及成功时关键字在数组中的位置。例如,在有序表11、13、18、28、39、56、69、89、98、122中查找关键字为89的元素

Jack-Cui 3571

二分查找关键码的比较次数

在顺序表 { 12、15、17、20、24、30、38、43、45、51、52} 中,用二分法查找关键码 20需做( ) 次关键字比较。 解: 数值 12 15 17 20 24 30 38 43 45 51 52 下标 0 1 2 3 4 5 6 7 8 9 10 以上一共11个数,按下标则是0…10,以下按照步骤进行 1、mid=(left + right)/ 2 = (...

随笔 1万+

基础查找算法(二分,哈希,字典树)

一、二分查找(最简单的查找) 1. 应用条件: 必须采用顺序存储结构。 必须按关键字大小有序排列。 2. 思想: 取中间值划分左右区间,因为元素都是有序的,取中间值划分左右区间,因此左侧都小于中间值,右侧都大于中间值 因此为了减少比较次数,每次都让关键字和中间值进行比较 相等则找到,不等则判断,小于则在左边区间,大于则在右边区间 持续划分区间,直到区间无法划分或者找到 3.步骤 准备测试数据 创建二分查找函数 声明所需的变量 边界判断(很重要养成习惯) 初始化 划分区间 1. 确定一开始的

此战必胜 674

查找算法二分查找算法

复习的时候,看到了经典的二分查找(也叫折半查找)。 对于一个有序的序列,无论升序或是降序,一般为升序比较符合人的直观感受。如:A{1,2,5,7,8,9,10},我们要在序列中找到数字9所在的位置。我们以序列的中间元素A[4]作为初始对比对象和要查找的9比较 如果A[4]<9,则9一定在A[4]的右边。 如果A[4]>9,则9一定在A[4]的左边。 这里A[4] = 7<9,那么下一轮的查找

陈皮大虾的博客 811

使用二分法实现在一个有序列表中查找指定的元素

待整理

weixin_43851795的博客 5102

二分查找用C语言程序,二分查找的C语言实现

先预设值一段数组,再输入一个数,用二分查找法找到这个数再数组中的位置,并输出位置,通常使用二分法查找。下面是示例代码,查找二十个数中的某数并输出位置。#include #include int Search(int *a,int key){//在顺序表中折半查找key的元素,若找到返回元素下标,否则返回0int low=0,mid;int high=20;while(low<=high){m...

weixin_34704521的博客 788

数据结构算法——1010. 线性表二分查找

题目 思路 经典递归算法 需要注意返回条件:返回下标数 若找不到返回-1,如何返回-1?数据比最小数据小,比最大数据大,都找遍了都找不到 代码 #include<stdio.h> #include<stdlib.h> int bin(int * arr, int l, int r, int data) { if(l > r || data < arr[l] || data > arr[r])return -1; int ave = (l + r)

JamSlade的博客 408

查找----二分查找

1、二分查找二分查找法有一个很重要的前提条件:即待查找的序列必须是已经排好序的。 假设元素序列是按升序排列,将序列中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将序列分成前、后两个子序列,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子序列,否则进一步查找后一子序列。重复以上过程,直到找到满足条件的记录,查找成功,返回元素在序...

weixin_30904593的博客 287

16 基本查找算法二分查找算法

二分查找算法 原理 二分查找算法也叫折半法查找法,要求待查找的列表必须是按关键字大小有序排列的顺序表。 查找过程如下所示: (1)将表中间位置记录的关键字与查找关键字比较,如果两者相等则表示查找成功;否则利用中间位置记录将表分成前、后两个子表。 (2)如果中间位置记录的关键字大于查找关键字,则进一步查找前一个子表,否则查找后一个子表。 (3)重复以上过程,一直到找到满足条件的记录为止时表明查找成功...

gofuncchan的博客 1718

国产中间件:InforSuite AS中创

国产中间件应用完美适配各类业务系统,为客户提供安全稳定、高效可靠、使用便捷的业务运行支撑平台。

上一篇: 斐波那契数列 - 实现一个斐波那契数列,并且打印出来
下一篇: 利用归并排序进行将数组序列从小到大排序
MAIN198
博客等级 码龄4年 2粉丝 · 12原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值