`
zhangyu8374
  • 浏览: 94596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基本算法连载(1)-顺序搜索与二分搜索

阅读更多
顺序搜索
Programmer每天都碰到顺序搜索,其code snippet:
/*
* 顺序遍历数组,搜索v值是否存在。如果存在,返回相应的位置索引,
* 否则返回-1
*/
int sequentialSearch(int a[],int v,int l,int r){
int i;
for(i = l;i <= r;i++){
if(v == a[i])
return i;
}
return -1;
}

分析:
  1. 假设数组拥有N个元素,对于不成功的搜索,总是搜索N个元素;对于成功的搜索,平均搜索次数为N/2。
  2. 假设每个数组元素被搜索到的概率相等,那么平均搜索次数可以这样计算:(1+2+...+N)/N = (N+1)/2
  3. 对于排序数组,相关性质不变。

二分搜索
code snippet:
/*
* 二分搜索,非递归实现
* 假设:数组元素已经按序排列
*/
int binarySearch(int a[],int v,int l,int r){
int m;
while(l<=r){
m = (l+r)/2;
if(v == a[m])
return m;

if(v > a[m]){
l = m + 1;
}else{
r = m - 1;
}
}
return -1;
}

/*
* 二分搜索,递归实现
*/
//dataForExperiment数组定义及初始化
int binarySearch(int v,int l,int r){
if(l > r){
return -1;
}
int m = (l + r)/2;
if(v == dataForExperiment[m]){
return m;
}else{
if(v > dataForExperiment[m]){
return binarySearch(v,m+1,r);
}else{
return binarySearch(v,l,m-1);
}
}
}
分析:
  1. 假设Tn表示在最坏情况下二分搜索需要比较的次数,那么有Tn=Tn/2+1,其中n>=2,T1=1
  2. 求解递归式,可以得到二分搜索检查元素个数永远不超过lgn+1。
  3. 数组必须是已经排好序的。
分享到:
评论

相关推荐

    数据结构算法与应用--C++语言描述(代码与习题答案)

    10. **查找算法**:如顺序查找、二分查找、跳表查找等,它们在不同的数据结构上具有不同的效率。 11. **字符串处理**:字符串是字符序列,C++中的`std::string`类提供了丰富的字符串操作功能,如拼接、查找、替换等...

    算法分析与设计——二分搜索

    本文档将详细介绍算法分析与设计中的二分搜索算法,涵盖其基本概念、实现步骤、优缺点分析等方面,旨在帮助算法初学者深入了解二分搜索的原理和应用。 一、基本概念 二分搜索是一种常用的搜索算法,用于在有序数组...

    算法分析与设计-实验二 二分查找实验报告.docx

    在二分查找算法中,每次比较都是与序列中间的元素进行,从而将搜索范围限制在中间元素的一侧。 首先,我们需要理解二分查找的适用条件:输入数据必须是有序的。对于无序数据,二分查找无法发挥其优势。在本实验中,...

    算法初步课件 1.2.2 基本算法语句--条件语句.ppt

    算法初步课件 1.2.2 基本算法语句--条件语句.ppt

    数据结构,算法与应用 ---C++语言描述(代码与习题答案)

    常见的算法包括排序(如冒泡排序、快速排序、归并排序)、查找(如线性查找、二分查找)、图遍历(如深度优先搜索、广度优先搜索)以及动态规划等。这些算法不仅要求正确性,还应关注效率,通常用时间复杂性和空间...

    二分搜索算法

    ### 二分搜索算法知识点详解 #### 一、算法简介 二分搜索(Binary Search),又称折半查找,是一种在有序数组中查找特定元素的高效算法。其基本思想是通过将待查找值与数组中间元素进行比较,不断缩小查找范围,...

    算法:C语言实现(第1-4部分)

    #### 4.1 顺序查找与二分查找 - 顺序查找流程 - 二分查找条件 - 比较两种查找方式的效率 #### 4.2 图论基础 - 图的基本概念(顶点、边、邻接矩阵/表) - 图的存储结构 - 图的遍历算法(深度优先搜索、广度优先搜索...

    哈工程本科算法实验-二分搜索

    二分搜索,也被称为二分查找,是一种在有序数组中查找特定元素的高效算法。它主要利用了分治的思想,将问题不断分解为更小的子问题,直到找到目标值或者确定目标值不存在。二分搜索的时间复杂度为O(log n),在大数据...

    引力搜索算法GSA-Kmean-Transformer-GRU故障诊断分类【含Matlab源码 6000期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:Main .m; 数据; 调用函数:其他m文件;...4.4.5 萤火虫算法FA/差分算法DE-Kmean-Transformer-GRU分类

    查找算法--顺序查找

    数据结构用C++的实现,蓝桥杯,ACM,算法基础,C++入门

    数据结构与算法分析--C语言描述_数据结构与算法_

    查找算法如线性查找、二分查找,用于定位数据;图算法如深度优先搜索(DFS)和广度优先搜索(BFS),用于遍历图结构;还有动态规划、贪心算法、回溯法等,应用于解决复杂问题。 C语言中的算法实现往往涉及指针操作...

    计算机算法分析 二分查找 分治算法

    **二分查找与分治算法详解** 二分查找是一种基于分治策略的高效搜索算法,主要应用于有序数据集合。在给定的升序排列的数组a[0:n-1]中,二分查找的目标是找到特定元素x的位置,或者确认元素不在数组中。算法的基本...

    二分搜索算法及其源代码

    二分搜索算法是一种高效、基于比较的搜索技术,它在有序数据集合中寻找目标值。这个算法的核心思想是不断缩小搜索范围,通过每次迭代将搜索区间减半,从而快速定位到目标元素。二分搜索算法在计算机科学和编程中有着...

    数据结构与算法 -李春葆 实验报告-顺序表

    《数据结构与算法》实验报告主要探讨了顺序表这一线性表的实现方式,通过具体的C语言编程实现,包括顺序表的初始化、查找、插入和删除等基本操作。以下是相关知识点的详细说明: 1. **线性表的逻辑结构**: 线性表...

    顺序表与单链表基本运算算法.doc

    顺序表与单链表基本运算算法 顺序表是一种基本的数据结构,它是由一组连续的存储单元组成的,每个存储单元都可以存储一个数据元素。顺序表的基本运算包括创建顺序表、打印顺序表、查找顺序表中的元素、插入元素到...

    数据结构与排序算法------通过代码示例,讲解:数据结构和9种排序算法。.zip

    算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法...

    线性结构基本算法的实现-数据结构实验报告.doc

    本实验报告的目的是掌握线性结构的基本算法,包括顺序表、链表、栈、队列和稀疏矩阵的实现。通过本实验,学生可以了解线性结构的基本操作,如插入、删除、查找、合并等,并且掌握这些操作的算法。 1. 顺序表的实现 ...

    二分搜索(算法 代码)

    二分搜索,也被称为折半搜索,是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组分成两半,然后比较中间元素与目标值,根据比较结果决定是在左半部分还是右半部分继续搜索。这个过程不断进行,直到...

    实用算法基础教程--算法和数据结构

    - **定义**: 一种遍历或搜索树或图的算法,按层次顺序进行搜索。 - **应用场景**: 寻找最短路径、网络爬虫等。 **第十四章:动态规划** - **第一节:动态规划的基本模型** - **概念**: 动态规划是一种优化技术,...

Global site tag (gtag.js) - Google Analytics