算法设计-二分查找(C++)

server/2025/2/11 17:57:18/

一、简述

二分查找是一种在有序数组中查找特定元素的高效算法,其时间复杂度为 O(log n)。

二、详细代码

#include<iostream>
#include<cmath>
using namespace std;int BinarySearch(int arr[], int x, int size )
{int l = 0;int r = size-1;int m = 0;while( l <= r){m = floor((l + r)/2);if( arr[m] == x){return m;} else if(arr[m] > x){r = m - 1;}else{l = m + 1;}}return -1;}int main()
{int size;std::cout<<"Enter Size:";std::cin>>size;int* arr = new int[size];for( int i = 0; i < size; i++){cout<<"arr element:";cin>>arr[i];}int x;cout<<"X:";cin>>x;int j = BinarySearch( arr,  x, size);if(j != -1){cout<<j;}else{cout<<0;}delete[] arr;return 0;
}

三、主要逻辑说明

  • 参数说明
    • arr[]:待查找的有序数组。
    • x:要查找的目标元素。
    • size:数组的大小。
  • 函数实现
    • 初始化变量 l 为 0,表示数组的左边界;rsize - 1,表示数组的右边界;m 为 0,用于存储中间元素的索引。
    • 使用 while 循环,只要左边界 l 小于等于右边界 r,就继续查找。
    • 在每次循环中,计算中间元素的索引 m,使用 floor 函数向下取整。
    • 如果中间元素 arr[m] 等于目标元素 x,则返回中间元素的索引 m
    • 如果中间元素 arr[m] 大于目标元素 x,说明目标元素在左半部分,更新右边界 rm - 1
    • 如果中间元素 arr[m] 小于目标元素 x,说明目标元素在右半部分,更新左边界 lm + 1
    • 如果循环结束后仍未找到目标元素,返回 -1。


http://www.ppmy.cn/server/166820.html

相关文章

JEECGBOOT前端VUE3版本浏览器兼容支持chrome>=76版本方法

JEECGBOOT最新的前端VUE3版本使用的 VITE最新版本Ant design vue最新版本。 部署到生产环境以后发现&#xff0c;chrome76-100左右&#xff0c;CSS样式会乱掉失效&#xff0c;不太兼容&#xff0c;103以上的没问题。 尝试了三种方法&#xff0c;前两种都失败了&#xff0c;第三…

5、大模型的记忆与缓存

文章目录 本节内容介绍记忆Mem0使用 mem0 实现长期记忆 缓存LangChain 中的缓存语义缓存 本节内容介绍 本节主要介绍大模型的缓存思路&#xff0c;通过使用常见的缓存技术&#xff0c;降低大模型的回复速度&#xff0c;下面介绍的是使用redis和mem0&#xff0c;当然redis的语义…

deepseek本地部署应用--python太空大战 - 动态星空版

丫头很爱玩游戏&#xff0c;我就用python结合deepseek给他写了一个小游戏&#xff0c;她很感兴趣&#xff0c;还要学习ai编程&#xff0c;自己做游戏。 完整代码如下&#xff1a; import pygame import random import math# 初始化 Pygame pygame.init()# 游戏窗口设置 SCREEN…

第436场周赛:按对角线进行矩阵排序、将元素分配给有约束条件的组、统计可以被最后一个数位整除的子字符串数目、最大化游戏分数的最小值

Q1、按对角线进行矩阵排序 1、题目描述 给你一个大小为 n x n 的整数方阵 grid。返回一个经过如下调整的矩阵&#xff1a; 左下角三角形&#xff08;包括中间对角线&#xff09;的对角线按 非递增顺序 排序。右上角三角形 的对角线按 非递减顺序 排序。 2、解题思路 遍历所…

用Python批量去除PDF文件的密码

注意&#xff1a;前提是你知道密码&#xff0c;本代码不是暴力跑字典 最近有个需求&#xff0c;下载了一堆PDF&#xff0c;但都有加密&#xff0c;密码还不一样&#xff0c;每次打开都要输密码很麻烦&#xff0c;所有有了此工具&#xff0c;批量去除所有密码。 import os fro…

计算机视觉的研究方向、发展历程、发展前景介绍

以下将分别从图像分类、目标检测、语义分割、图像分割&#xff08;此处应主要指实例分割&#xff09;四个方面&#xff0c;为你介绍研究生人工智能计算机视觉领域的应用方向、发展历程以及发展前景。 文章目录 1.图像分类应用方向发展历程发展前景 2.目标检测应用方向发展历程…

KOA开普勒优化朴素贝叶斯分类预测matlab

开普勒优化算法&#xff08;Kepler Optimization Algorithm&#xff0c;简称 KOA&#xff09;&#xff0c;作为一种元启发式算法&#xff0c;其灵感源自开普勒的行星运动规律。该算法模拟行星在不同时刻的位置与速度&#xff0c;每个行星都代表一个候选解&#xff0c;在优化进程…

七、C++设计模式

23种设计模式&#xff0c;以下底色的是个人认为常用的&#xff0c;供参考。 设计模式 释义 模板设计模式 类似C中的回调函数&#xff0c;主架构已经搭建完成&#xff0c;根据派生类不同执行不同的虚函数。 策略设计模式和状态模式很像&#xff0c;如果一个程序中使用了if else…