有序数组中找到num

2023-11-05

问题

在有序数组中找到num。

分析

直接遍历查找均可。但既然是有序数组,则充分利用此条件,采用效率更高的二分法。

代码

创建一个随机的有序数组

void Random_array(int* array, int num)
{
	for (int i = 0; i < num; i++)
		array[i] = rand() % 100;
}

void Print_array(int* a, int n)
{
	for (int i = 0; i < n; i++)
		printf("%d ,", a[i]);
	printf("\n");
}

void swap(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}
void Bubble_sort(int* a, int n)
{
	if (n < 2)
		return;
	for (int i = n - 1; i >= 0; i--)
	{
		for (int j = 0; j < i; j++)
		{
			if (a[j] > a[j + 1])
				swap(a[j], a[j + 1]);
		}
	}
}



使用遍历查找,用于后续测试二分法是否正确

bool isIn_1(int array[], int num)
{
	//for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
	for (int i = 0; i < N; i++)
		if (array[i] == num)
			return true;
	return false;

}//遍历查找,笨方法

二分法

简而言之,对比查找的num,与中间的数比较大小,然后取数组一半,再去这段数组和中间值作比较,循环往复。

bool isIn_2(int array[], int num)
{

	//int mid,L = 0, R = sizeof(array) / sizeof(array[0]);
	int mid = 0, L = 0, R = N - 1;
	while (L <= R)
	{

		mid = (L + R) / 2;
		if (array[mid] == num)
			return true;
		else if (num > array[mid])
			L = mid + 1;
		else
			R = mid - 1;

	}
	return false;
}

测试代码

随机生成数组,调用两个方法,查看结果是否一致。

完整代码

//P17 二分法查找有序数组数组中的指定数值
#include <iostream>
using namespace std;
#define N 30
void Random_array(int* array, int num)
{
	for (int i = 0; i < num; i++)
		array[i] = rand() % 100;
}

void Print_array(int* a, int n)
{
	for (int i = 0; i < n; i++)
		printf("%d ,", a[i]);
	printf("\n");
}

void swap(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}
void Bubble_sort(int* a, int n)
{
	if (n < 2)
		return;
	for (int i = n - 1; i >= 0; i--)
	{
		for (int j = 0; j < i; j++)
		{
			if (a[j] > a[j + 1])
				swap(a[j], a[j + 1]);
		}
	}
}



//判断数组中是否有此数
bool isIn_1(int array[], int num)
{
	//for (int i = 0; i < sizeof(array) / sizeof(array[0]); i++)
	for (int i = 0; i < N; i++)
		if (array[i] == num)
			return true;
	return false;

}//遍历查找,笨方法

bool isIn_2(int array[], int num)
{

	//int mid,L = 0, R = sizeof(array) / sizeof(array[0]);
	int mid = 0, L = 0, R = N - 1;
	while (L <= R)
	{

		mid = (L + R) / 2;
		if (array[mid] == num)
			return true;
		else if (num > array[mid])
			L = mid + 1;
		else
			R = mid - 1;

	}
	return false;
}


int main()
{
	srand((unsigned int)time(NULL));
	for (int j = 0; j < 1000000; j++)
	{
		int array[N] = {};
		Random_array(array, N);
		Bubble_sort(array, N);
		if (isIn_1(array, 66) == isIn_2(array, 66))
			cout << "对";
		else
		{
			Print_array(array, N);
			cout << isIn_1(array, 66) << endl;
			cout << isIn_2(array, 66);
			break;
		}
	}
	//int array[N] = {};
	//Random_array(array, N);
	//Print_array(array, N);
	//Bubble_sort(array, N);
	//Print_array(array, N);
	//cout << isIn_1(array, 66) << endl;
	//cout << isIn_2(array, 66);
	return 0;
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有序数组中找到num 的相关文章

  • 用于代数简化和求解的 C# 库 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 网络上有很多代数求解器和简化器 例如 algebra com 上不错的代数求解器和简化器 然而 我正在
  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 注销租约抛出 InvalidOperationException

    我有一个使用插件的应用程序 我在另一个应用程序域中加载插件 我使用 RemoteHandle 类http www pocketsilicon com post Things That Make My Life Hell Part 1 App
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • 提交后禁用按钮

    当用户提交付款表单并且发布表单的代码导致 Firefox 中出现重复发布时 我试图禁用按钮 去掉代码就不会出现这个问题 在firefox以外的任何浏览器中也不会出现这个问题 知道如何防止双重帖子吗 System Text StringBui
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • 回发后刷新时提示确认表单重新提交。我做错了什么?

    我有一个以空白 默认状态启动的仪表板 我让用户能够将保存的状态加载到仪表板中 当他们单击 应用 按钮时 我运行以下代码 function CloseAndSave var radUpload find radUpload1ID var in
  • 在 C 中初始化变量

    我知道有时如果你不初始化int 如果打印整数 您将得到一个随机数 但将所有内容初始化为零似乎有点愚蠢 我问这个问题是因为我正在评论我的 C 项目 而且我对缩进非常直接 并且它可以完全编译 90 90 谢谢 Stackoverflow 但我想
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 如何禁用 fread() 中的缓冲?

    我正在使用 fread 和 fwrite 读取和写入套接字 我相信这些函数用于缓冲输入和输出 有什么方法可以在仍然使用这些功能的同时禁用缓冲吗 Edit 我正在构建一个远程桌面应用程序 远程客户端似乎 落后于服务器 我不知道可能是什么原因
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • Cmake 链接共享库:包含库中的头文件时“没有这样的文件或目录”

    我正在学习使用 CMake 构建库 构建库的代码结构如下 include Test hpp ITest hpp interface src Test cpp ITest cpp 在 CMakeLists txt 中 我用来构建库的句子是 f
  • C++ 函数重载类似转换

    我收到一个错误 指出两个重载具有相似的转换 我尝试了太多的事情 但没有任何帮助 这是那段代码 CString GetInput int numberOfInput BOOL clearBuffer FALSE UINT timeout IN
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List
  • 如何将 PostgreSql 与 EntityFramework 6.0.2 集成? [复制]

    这个问题在这里已经有答案了 我收到以下错误 实体框架提供程序类型的 实例 成员 Npgsql NpgsqlServices Npgsql 版本 2 0 14 2 文化 中性 PublicKeyToken 5d8b90d52f46fda7 没

随机推荐

  • jquery.webcam进行摄像头拍照

    最近由于项目要进行人像采集 所以就涉及到在web页面调用摄像头 进行拍照来获取图片 可以初来乍到 这技术又不是杠杠滴 所以在面对这有实现想法 但是又没有实现手段的时候 还是按照往常惯例找度娘 这个搜索过程可谓是无比艰辛 由于关键字不准确迟迟
  • WDK李宏毅学习笔记第十八周01_Meta learning-MAML and Gradient descent as LSTM

    Meta learning MAML and Gradient descent as LSTM 文章目录 Meta learning MAML and Gradient descent as LSTM 摘要 1 Meta learning
  • LO Frequency Plan

    概述 LO DIV是位于VCO和mixer之间的模块 其作用是分频和驱动长走线 设计难点在于底噪 不同的band有不同的频率覆盖范围 为了减小VCO的设计难度需要选择合适的分频方案 E UTRA规定的band与频率的对应关系在3GPP或wi
  • GNU/Linux下有多少是GNU的?

    原文地址 http coolshell cn articles 4826 html more 4826 一个葡萄牙的学生写了一篇文章 How much GNU is there in GNU Linux GNU Linux下有多少是GNU的
  • java模拟HTTP请求工具

    import org slf4j Logger import org slf4j LoggerFactory import java io BufferedReader import java io DataOutputStream imp
  • sqli-labs/Less-10

    这一关提示我们使用布尔和时间盲注相结合的做法 我们先去判断一下注入类型 输入1 and 1 2 存在回显 为字符型 输入1 存在回显 而且回显还一模一样 输入1 存在回显 而且回显当然是一摸一样的啦 我怀疑一直都是如此输出 所以根本不能使用
  • j2ee规范认识

    完成了J2EE视频的学习 三个系列的视频感觉走的是那么的艰难 在懵懵懂懂中进行着 在视频进行的时候已经对J2EE以及EJB的大体框架进行笔记记录和框架整理 接下来对在学习过程中的一些关键点进行总结 J2EE是什么 要想知道J2EE是什么就要
  • Open vSwitch流表查找分析

    流表查找过程是Open vSwitch核心中的核心 在此之前 庾志辉写过关于对Open vSwitch 下文简称OVS 源代码分析的系列博客 链接如下 http blog csdn net yuzhihui no1 article deta
  • 【漏洞复现】Microsoft Office MSDT 远程代码执行漏洞 (CVE-2022-30190)

    0x01 Microsoft Office Microsoft Office是由Microsoft 微软 公司开发的一套办公软件套装 常用组件有 Word Excel PowerPoint等 0x02 漏洞简介 该文档使用 Word 远程模
  • 如何连接到虚拟服务器上,虚拟主机如何连接服务器的

    虚拟主机如何连接服务器的 内容精选 换一换 GaussDB DWS 提供的gsql命令行客户端 它的运行环境是Linux操作系统 在使用gsql客户端远程连接GaussDB DWS 集群之前 需要准备一个Linux主机用于安装和运行gsql
  • 你真的知道运维是干嘛的吗?

    文章目录 前言 运维基本能力 运维岗位分类 按照职责划分 按照服务类型划分 按照运维模式划分 按照工作模式划分 按照管理层级划分 按照技术方向划分 按照服务对象划分 按照工作内容划分 按照服务形式划分 按照业务类型划分 按照技术栈划分 按照
  • python selenium页面跳转_Python爬虫之Selenium多窗口切换的实现

    前言 在页面操作过程中有时候点击某个链接会弹出新的窗口 但由于Selenium的所有操作都是在第一个打开的页面进行的 这时就需要主机切换到新打开的窗口上进行操作 WebDriver提供了switch to window 方法 可以实现在不同
  • 如何去实现机械灵巧手玩魔方和弹钢琴_工业级灵巧手与智慧抓取技术

    随着工业机器人的发展以及机器人应用领域的不断扩展 作为末端执行器的机器人夹爪的应用边界也在不断扩展 在工业自动化领域被广泛使用的气动手爪 正在被可精确控制 可数字化管理的新一代末端执行器所替代 编辑 符号整理 Cloud Sunny 机器人
  • “找不到或无法加载主类”该问题出现的一个可能原因

    今天按照教材上的程序 编译运行时 程序编译没有问题 但是运行时 出现 找不到或无法加载主类 的提示 遂网上四处找答案 说什么 1 拼写错误 2 环境变量配置时classpath和path前面未加 下面是我的程序 package myFram
  • vue——echarts柱状图横轴文字太多放不下【处理办法】

    1 如果单纯是文字太多 且中间无法分割开的话 可以采用两种方式 文字倾斜展示 效果 在options配置中的xAxis中配置如下代码 axisLabel interval 0 rotate 40 文字竖直显示 效果 在options配置中的
  • 终于搞定了SHADOWMAP,

    5 5pcf
  • 关于 ChatGPT 必看论文推荐【附论文链接】

    关于 ChatGPT 必看论文推荐 2022年11月 OpenAI推出人工智能聊天原型 ChatGPT 再次赚足眼球 为AI界引发了类似AIGC让艺术家失业的大讨论 ChatGPT 是一种专注于对话生成的语言模型 它能够根据用户的文本输入
  • 情人节用Python画玫瑰花

    用Python turtle 绘制的玫瑰花 效果图 import turtle import time turtle penup turtle setup 1100 1000 turtle hideturtle turtle speed 1
  • tensorRT模型推理时动态shape

    动态shape 所谓动态shape就是编译时指定可动态的范围 L H 推理时可以允许L lt shape lt H 在全卷积网络中我们通常就是有这个诉求的 推理时的shape是可以动态改变的 不一定要限制死 这个动态shape不一定只宽高
  • 有序数组中找到num

    问题 在有序数组中找到num 分析 直接遍历查找均可 但既然是有序数组 则充分利用此条件 采用效率更高的二分法 代码 创建一个随机的有序数组 void Random array int array int num for int i 0 i