算法9:在一个循环有序的数组里查找一个数

循环有序数组查找一个数 网上看了有些代码有些错误,这里重新更正了下 思想:循环数组有一边是有序的,首先先判断哪一边有序(通过将当前mid点与最左边节点比较),然后查看是否在有序边上 代码如下 #include #include using namespace std; int Binary_Search(int *a,int low,int high,int value) { int mid=(low+high) 阅读详情

解题思路

采用中分方法进行查找,考虑到是循环有序的数组,存在一边有序的情况,将中间值与最左边值比较,查看是否有序,则左有序,否则就是右有序。然后再确定待查找值的区域。

c++代码

//loopBuffer:循环有序数组
//length:循环有序数组长度
//value:待查找的数
//return:返回待查找数在数组中的位置
int BinarySearch(int* loopBuffer,int length, int value)
{
    if(loopBuffer == NULL || length == 0)
    {
        cout<<"buffer is error"<<endl;
        return -1;
    }
    int left = 0;
    int right = length -1;
    int mid = (left+right)/2;

    while(left <= right)
    {
        mid = (left+right)/2;
        if(value == loopBuffer[mid])
        {
            return mid;
        }

        if(loopBuffer[left]<loopBuffer[mid])//左有序
        {
            if(loopBuffer[left]<= value && value <= loopBuffer[mid])
            {
                right = mid - 1;
            }
            else
            {
                left = mid +1;
            }
        }
        else //右有序
        {
            if(loopBuffer[mid] <= value && value <= loopBuffer[right])
            {
                left = mid+1;
            }
            else
            {
                right = mid-1;
            }
        }
    }

    return -1;
}

测试代码

int _tmain(int argc, _TCHAR* argv[])
{
    int loopBuffer[10] = {6,7,8,9,0,1,2,3,4,5};
    int i = 0;
    int value = 0;
    while(i < 10)
    {
        cout<<"please input a value in {6,7,8,9,0,1,2,3,4,5}:"<<endl;
        cin>>value;
        cout<<"pos = "<<BinarySearch(loopBuffer,10,value)<<endl;
        i++;
    }

    cout<<"please input a value not in {6,7,8,9,0,1,2,3,4,5}:"<<endl;
    cin>>value;
    cout<<"pos = "<<BinarySearch(loopBuffer,10,value)<<endl;
    return 0;
}
二分法在有序数组中查找一个数 例:在一个有序数组{1,2,3,4,5,6,7,8,9,10}中查找元素7的下标 算法思想: 因为是有序数组,先查找中间下标的元素: (1)如果该元素等于7,则返回中间下标,查找结束;          (2)如果该元素大于7,则7必然在中间元素的右边部分,则缩小范围,在右半部分查找7,再计算右半部分的中间下标,转到(1) (3)如果该元素下于7,则7必然在中间元素的左半部分,则缩小范 阅读详情

相关推荐

有序读入数到数组中并查找数——数组标记法

从键盘读入10个数存放在数组中,要求由小到大输入(允许有相同的数)。 如果读入的数比前面的数小,则该数无效,继续读入后面的数据。 输入一个待查找的数,要求找出该数是数组中第几个(序号从1开始计算)。 如果待查找的数在数组中有多个,返回相同数中最后一个数的位置; 如果该数不在数组中,则输出“Not Find!”。 输入格式: 在一行读入存放到数组中的数,下一行读入要查找的数。 输出格式: 输出查找的...

不浪漫宇宙 1566

循环有序数组中查找某个数

循环有序数组中查找某个数 利用二分查找,一个循环有序数组从中间切分,一定分成一个有序数组和一个循环有序数组,由于循环有序数组不容易判断,我们只需判断哪一边是有序数组以及target是不是在有序数组这一边。 # 循环有序数组查找某个数 def find(ls, target): if not ls or not target: return -1 low =...

冷咖啡离开了杯垫,来到了博客 1103

C语言二分法查找算法详解

前言 假如给你一组有序的数字,让你从中找出某个元素,我们可能首先想到的是利用循环从第一个元素开始试,直到找出来这个数或者没有找到循环结束。因为这样的方法查找次数比较多,耗费时间长。所以我们想到了另外一种比较节省时间且效率高的二分算法。 二分算法/折半查找算法 我们先说一下什么是二分算法,假如给出一个这样的一组有序数字1,2,3,4,5,6,7,8,9,10。让你从中找出数字7。我们先找出这组数字的...

weixin_45804960的博客 1万+

循环有序数组中查找指定值

循环数组中查找是否存在指定值的思想是:由于是循环有序数组,那就说明该数组通过循环移位可以成为有序数组,即该数组可以划分为两个有序的部分,且前一部分的元素都不小于后一部分元素,也就是形如{7,8,9,1,2,3,4}的数组。我门可以借鉴二分查找的方法解决。使用low和high指针分别指向数组首尾部元素,当low所指元素小于high所指元素时,此时数组为有序数组,可以直接使用二分法查找;当low所指元

zhangchuan的博客 2316

【Python】多分类算法—Random Forest

【Python】多分类算法—Random Forest 本文将主要就Random Forest(随机森林)的多分类应用进行描述,当然也可运用于二分类中 文章目录【Python】多分类算法—Random Forest前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 本文主要引用的是sklearn 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import nump

weixin_43166884的博客 1万+

CUPED (Controlled-experiment using Pre-Experiment Data) 论文学习笔记

CUPED是一种用于提升A/B测试灵敏度的方差缩减技术。它通过利用实验前用户行为数据(协变量X)构建调整后的指标Y_cuped=Y-θ(X-E[X]),其中θ=Cov(Y,X)/Var(X)。这种方法能在保持处理效应估计无偏的前提下,将方差降低1-ρ²倍(ρ为前后指标相关性)。CUPED的核心优势在于:不改变平均处理效应的估计,但能显著提升统计功效,使得实验更容易检测到微小但真实的效应,同时减少所需样本量或实验周期。该技术特别适用于用户异质性大、指标方差高的场景。

pursuit的博客 2148

从有序数组中查找数字的4种方法/二分查找/二分查找的函数递归/一一对比/一一对比的递归

函数递归+图解,二分查找,一一对比 从有序数组中查找数字

日向晚,声声慢的博客 3279

simulink可控励磁同步电机模型分析

他励同步电机模型分析

qq_26681609的博客 5552

【每日一题】有序数组判断一个数是否存在

二分查找算法的应用-有序数组中判断一个数是否存在

第一行代码 717

Plant simulation、Flexsim、Automod、Emulate3D、VisuaComponent仿真软件对比

E3D在行业内以展示效果好,入门阶段易学易用人机界面友好,电控仿真连接方便不需要借助其他第三方软件,E3D平台开放度较高用户DIY程度强,数据分析功能针对要评定对象的KPI的可根据项目或者使用者需求进行评定。3.支持导入导出多种格式的文件,比如dwg、dxf、fbx、obj、3ds、step、stp、iges、skp、stl、wrl、 bmp 等等。3.软件自带模型组件库程序代码开放,用户可以引用、修改、拷贝,按照自己的逻辑修改模型,或者创建模型并保存到组件库与别人共享。3. 支持导出布局图片。

qq_43342303的博客 3581

深入解析AMBA5 AXI与ACE协议:从基础到高级应用

本文深入解析了AMBA5 AXI与ACE协议的核心机制与应用。AXI协议通过分离通道、突发传输和乱序完成实现高性能数据传输,而ACE协议在此基础上构建了硬件级缓存一致性解决方案,通过监听机制和状态模型确保多核系统数据统一。文章还探讨了在异构计算等复杂场景下的实战应用与AMBA5的新特性。

cc789的博客 963

在一个有序的数组中查找一个数字(二分查找法)

对于同博主一样刚入门不久的,遇到二分查找法是否也总是一学就会,一写就废,今天就来为大家来详解一下二分查找,巩固知识的同时希望本文能对大家有帮助。

干脆面la的博客 6461

Comsol 超声空化气泡仿真

当液体中受到高能量的超声波作用时,液体中的压力会发生剧烈变化,形成局部的低压区域。当液体中的压力降低到饱和蒸汽压以下时,就会发生空化现象,即液体中形成微小气泡。这种空化常用于一些工业应用,如清洗、乳化、混合等。这种空化常用于一些医学和生物学应用,如碎石术、肿瘤治疗、细胞破碎等。超声空化的应用非常广泛。在医学领域,超声空化广泛应用于诊断和治疗,如超声造影、超声刀、超声碎石术等。在工业领域,超声空化可用于清洗、乳化、混合等工艺。此外,超声空化还在食品加工、化学合成、环境保护等领域有着重要应用。

声学黑洞仿真工作室 2557

C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n

C语言:使用 普通方法 和 二分查找算法(折半查找算法) 在一个有序数组中查找具体的某个数字n ,包含题目,分步骤思路、最终实现代码和最终实现效果

正在努力学C呀!(要学好久呢......) 2874

innovus:给channel加soft blockage

dbGet [dbGet top.fplan.pBlkgs.name finishfp_place_blkg_* -p].boxes就可以获得channel坐标。意思是给30um以下的channel加soft blk,至于channel的坐标,通过抓取该soft blk去获取,比较容易。工具自己加入的placement blockage命名上叫finishfp_place_blkg_*ICC2中有给channel自动加soft blockage的命令,相应的innovus也有类似的命令,我们可以使用。

m0_61544122的博客 483

【软件使用】向日葵网络连接错误

一直报这个错误,尝试了修改版本无果,各种密码都正确,最后得出结轮是时间没有同步,查看代理是否更改了时间,做一下同步即可。

andeyeluguo的博客 7977

二分查找-(在一个有序数组查找某个数字n)

注意前提:有序数组 !!!! 传统方法查找的代码演示: #include <stdio.h> int main() { //有序数组的创建 int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; //数组中有十个元素,相应的下标为0-9 int k = 7; //创建要查找的元素变量 int i = 0; for (i = 0; i < 10; i++) { if (arr[i] == k) { printf("找到了,下标是%d\n

weixin_60718941的博客 1977

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

二分查找算法从有序数组中查找特定元素

二分查找算法适用于有序数组(即从大到小或从小到大排序的数组),有序数组不一定是连续数组。 如果数组是有序的话,用二分查找法来寻找元素简单高效,用其他的方法基本上算炫技。 问题描述:查找一个元素(target)是否在有序数组(nums)中 一般解决方法:for循环比对,需要比对全数组 二分查找思想:比较target与数组中间值,如果target>中间值,则表示target在中间值的右边,令min=中间值下标,即舍去了中间值的左边数组。反之亦然,通过不断的取中间值来缩小查找范围,一次就缩小了1/2的范围,

swansonge的博客 2602

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

编写函数,在一个有序数组中查找具体的某个数字n(折半查找)

标题

weixin_45643859的博客 2747

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【算法】LeetCode 704——二分查找 & 在排序数组中查找元素的第一个和最后一个位置

本文通过两个经典题目讲解了二分查找的基础用法和进阶应用,在实现过程中需要注意边界条件的处理,比如整数溢出、死循环等问题。二分查找的思想不仅适用于简单的元素查找,还能扩展到查找边界、寻找旋转点等场景,掌握好二分查找对算法学习至关重要。希望本文能帮助你更好地理解和运用二分查找算法。

qq_2778465975的博客 1万+

循环有序数组二分查找

算法描述,一个有序的数组,从开始到中间截取一段数组放到数组的尾部,这个数组会变成循环有序的数组,在这个循环有序的数组中进行二分查找 例如 1,2,3,4,5,6,7,8,9 截取前4位放到尾部会变成5,6,7,8,9,1,2,3,4 变成循环有序的数组 算法实现:采用二分查找的方式,获取中间的一个数组,然后看一下转折点在中间数的左边还是右边,然后进行分情况讨论 具体实现代码如下:...

u011250186的博客 1152

C语言在有序数组中查找具体的数字

给一个指定数字数组,输入一个数字来查找它的下标。

qq_66621069的博客 3791

算法——二分查找

算法、二分查找

2303_78442132的博客 2019

面试必考真题-算法篇:请实现有重复数字的有序数组的二分查找。 输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。

面试必考真题-算法篇 牛客网 二分查找 题目描述 请实现有重复数字的有序数组的二分查找。 输出在数组中第一个大于等于查找值的位置,如果数组中不存在这样的数,则输出数组长度加一。 题目分析: 方法一 下面是Java代码 import java.util.*; public class Solution { /** * 二分查找 * @param n int整型 数组长度 * @param v int整型 查找值 * @param a int整型一维数组 有序数组

gaozhuang63的博客 2507

折半查找(二分查找)是一种在有序数组中查找特定元素的高效算法

折半查找(二分查找)是一种在有序数组中查找特定元素的高效算法。通过不断地将数组分成两半,然后在其中一半中继续查找,直到找到目标元素或确定目标元素不在数组中。它具有高效、简单易实现的特点,但只能在有序数组上使用。

[Blog][Domain] programb.blog.youkuaiyun.com 1167

将一个任意整数插入到已排列的整型数组中,插入后,数组中的数仍保持有序

package com.qa.dm.operation; public class test005 { public static void main(String[] args) { int[] arr = {1,3,4,5,6,7}; //插入一个数组的元素 int a= 2; //记录插入元素的下标 i...

weixin_38023156的博客 6054
上一篇: 算法8:一个整数数组里怎么同时找最大和最小的数,尽量优化比较次数
下一篇: 算法10:给一个array和一个target value, 检查array里是否存在两个数之和为target
pplin
博客等级 码龄18年 6粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值