检索算法
时间:2020-03-16
本文章向大家介绍检索算法,主要包括检索算法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 问题
写出两种检索算法:在一个排好序的数组T[1..n]中查找x,如果x在T中,输出x在
T的下标j;如果x不在T中,输出j=0.
2. 解析
1、最暴力的方法就是,循环一遍整个数组,如果找到x,则输出下标,如果未找到就输出0.
2、注意到此为有序数组,所以可以用二分法查找,时间复杂度比暴力快。
3. 设计
1、暴力
For(int i=1;i<=n;i++){
If(T[i]==x)cout<<i<<”\n”;
}
if(未找到)cout<<0<<”\n”;
2、二分
int l=1,r=n;
while(l<=r){
int mid=(l+r)>>1;
if(T[mid]==x){
cout<<mid<<"\n";
return;//找到x,输出下标mid
}
if(T[mid]<x)l=mid+1;//不断二分,逼近x
else r=mid-1;
}
4. 分析
1、暴力算法,遍历整个数组,时间复杂度为O(n).
2、二分法,时间复杂度为O(logn).
5. 分析
1、暴力算法
/*
author: keke
project name:暴力查找算法
Time Complexity: O(n)
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int T[maxn],n,x;
void solve(int x){
for(int i=1;i<=n;i++){
if(T[i]==x){
cout<<i<<"\n";
return;//找到x,输出下标i
}
}
cout<<0<<"\n";//未找到,输出0
}
int main(){
cin>>n;//数组长度为n
for(int i=1;i<=n;i++)cin>>T[i];
cin>>x;//查找x的下标
solve(x);
return 0;
}
2、二分查找
/*
author: keke
project name:二分查找算法
Time Complexity: O(log(n))
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn=100;
int T[maxn],n,x;
void solve(int x){
int l=1,r=n;
while(l<=r){
int mid=(l+r)>>1;
if(T[mid]==x){
cout<<mid<<"\n";
return;//找到x,输出下标mid
}
if(T[mid]<x)l=mid+1;//不断二分,逼近x
else r=mid-1;
}
cout<<0<<"\n";//未找到x,输出0
}
int main(){
cin>>n;//数组长度为n
for(int i=1;i<=n;i++)cin>>T[i];
cin>>x;//查找x的下标
solve(x);
return 0;
}
原文地址:https://www.cnblogs.com/powerkeke/p/12503374.html
- 【死磕Java并发】—- J.U.C之并发工具类:CyclicBarrier
- Android Studio快捷键
- go 切片使用小结
- 分布式事务 TCC-Transaction 源码分析 —— 项目实战
- 分布式事务 TCC-Transaction 源码分析 —— 事务恢复
- Go的语言特性总结
- 注册中心 Eureka 源码解析 —— Eureka-Client 初始化(三)之 EurekaClient
- 从一次 Snowflake 异常说起
- 分布式事务 TCC-Transaction 源码分析 —— Dubbo 支持
- 2016 腾讯软件开发面试题(部分)
- 分布式事务 TCC-Transaction 源码分析 —— 运维平台
- 2016美团面试经历
- 2016年百度面试经历
- 注册中心 Eureka 源码解析 —— Eureka-Client 初始化(二)之 EurekaClientConfig
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux 学习笔记(1) 查看文件内容
- Python从入门到熟练(3):第一个程序
- 数学系的概率论和我们的不太一样。。。
- 如何实现一个优雅的Python的Json序列化库
- 还在从零开始搭建项目?手撸了款快速开发脚手架!
- Node.js 中的 require 是如何工作的?
- Ajax请求携带Cookie
- 关于kubernetes垃圾回收那点事
- 强化学习笔记11:工程师看强化学习
- 强化学习笔记10:经典游戏示例 classic games
- RL实践3——为Agent添加Policy、记忆功能
- 强化学习仿真环境搭建入门Getting Started with OpenAI gym
- 数据分析与数据挖掘 - 04科学计算
- SwiftUI:使用 @EnvironmentObject 从环境中读取自定义值
- JavaScript 启动性能瓶颈分析与解决方案