`
hengjie10
  • 浏览: 24195 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

二分搜索

 
阅读更多
二分搜索法,它充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用O(log n)完成搜索任务。它的基本思想是,将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止。如果x<a[n/2],则我们只要在数组a的左半部继续搜索x(这里假设数组元素呈升序排列)。如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。二分搜索法的应用极其广泛,而且它的思想易于理解,但是要写一个正确的二分搜索算法也不是一件简单的事。第一个二分搜索算法早在1946年就出现了,但是第一个完全正确的二分搜索算法直到1962年才出现。Bentley在他的著作《Writing Correct Programs》中写道,90%的计算机专家不能在2小时内写出完全正确的二分搜索算法。问题的关键在于准确地制定各次查找范围的边界以及终止条件的确定,正确地归纳奇偶数的各种情况,其实整理后可以发现它的具体算法是很直观的,我们可用C++描述如下:
#include"iostream.h"
int main()
{   int bs(int a[],int y,int n);
    int a[10]={1,5,6,32,36,56,62,74,98,150};
    int y=56;
    int i=bs(a,62,10);
    cout<<"我求的是在数组a,a[10]={1,5,6,32,36,56,62,74,98,150}中找数字56的位置"<<endl;
    if(i==-1)
	 cout<<"这个数不在数组中"<<endl;
    else
	 cout<<"这个数是数组的第"<<i+1<<"个数"<<endl;
    return 0;
}
int bs(int a[],int y,int n)
{
	int right=n-1;
	int left=0;
	int midd;
	while(left<=right)
		{
			midd=(left+right)/2;
			if(y==a[midd])
			return midd;
			if(y>a[midd])
			left=midd+1;
			else
			right=midd-1;
		}
	return -1;
}

分享到:
评论

相关推荐

    java二分搜索法程序,分行显示

    在编程领域,二分搜索法是一种非常高效且实用的算法,尤其在处理有序数据时。本文将详细解析标题“java二分搜索法程序,分行显示”所涉及的Java编程技术,包括二分搜索法的原理、实现以及如何结合数据结构进行文字...

    二分搜索法

    二分搜索法 二分搜索法是一种常用的查找算法,通过将数组分成两个部分,然后逐步缩小查找范围来找到目标元素。下面是对二分搜索法的详细解释: 基本概念 二分搜索法是基于数组的查找算法,它将数组分成两个部分,...

    erfensousuo.zip_二分搜索_二分搜索 matlab_二分法

    二分搜索,也称为二分查找,是一种在有序数组中查找特定元素的高效算法。它的工作原理基于分治思想,将查找区间不断减半,直到找到目标值或确定不存在为止。这种搜索方法在数据量较大且数据有序的情况下非常有用,...

    二分搜索算法

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

    算法分析 二分搜索算法

    **二分搜索算法详解** 二分搜索算法,也称为折半搜索,是一种在有序数组中查找特定元素的有效方法。它的核心思想是通过不断缩小搜索范围,以递归或迭代的方式快速定位目标值。该算法充分利用了数组的有序特性,极大...

    算法设计实验二分搜索法

    二分搜索法,又称折半查找,是一种在有序数组中查找特定元素的高效搜索算法。它的基本思想是将数组分成两半,每次比较中间元素与目标值,根据比较结果缩小搜索范围,直到找到目标元素或者搜索范围为空。这种方法充分...

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

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

    二分搜索的实现

    二分搜索算法的实现,整合了冒泡排序,虽然用的是很常规的东西,但是是自己认真在做的,算是自己程序之路上的一个小小收获吧。

    C++实现的二分搜索

    二分搜索,也称为折半搜索,是一种在有序数组中查找特定元素的高效搜索算法。它的基本思想是通过不断地将搜索区间对半减小来快速定位目标值。这个概念源于数学上的对数函数,因为每次查找都使搜索范围减少一半,所以...

    C语言 二分搜索源代码及界面演示

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

    二分搜索算法及其源代码

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

    分治法实现二分搜索(c语言)

    二分搜索,也被称为折半查找,是一种在有序数组中查找特定元素的高效算法,它基于分治法的策略。分治法是计算机科学中一种解决问题的通用方法,它将大问题分解为小的、相互独立的子问题,然后分别解决这些子问题,...

    数据结构C++二分搜索树

    ### 数据结构:C++ 实现二分搜索树 #### 概述 本篇文章将详细介绍如何在C++中实现一个二分搜索树(Binary Search Tree,BST),并具体讲解其查找、删除以及输出功能的实现方法。此外,我们还将探讨如何通过构造...

    二分搜索_快速排序_背包问题

    ### 二分搜索 #### 实验目的 - 掌握分治法的基本思想,并学会如何应用这一策略来解决具体的搜索问题。 #### 实验原理 二分搜索算法是一种高效的搜索技术,适用于已排序的数组。其核心思想是通过不断将搜索区间减半...

    二分搜索 设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

    设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j。

    二分搜索(算法 代码)

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

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

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

    设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

    设a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最大元素位置j

    JAVA开发二分搜索动态演示

    在Java开发中,二分搜索是一种非常重要的数值算法,它被广泛应用于大数据处理、数据库查找以及各种优化问题中。这个“JAVA开发二分搜索动态演示”项目,显然是一个小型的软件应用,它通过动态的方式展示了二分搜索...

Global site tag (gtag.js) - Google Analytics