`
zwhc
  • 浏览: 265890 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

二分查找实验代码

阅读更多
新代码
package test;

/**
 * http://www.cn-cuckoo.com/2010/04/20/are-you-one-of-the-10-percent-of-programmers-who-can-write-a-binary-search-1530.html
 * 
 * 二分查找
 * 2010-04-21 12:00 至 2010-04-21 12:36 
 *
 */
public class BinarySearch {
	
	/**
	 * 会出现死循环
	 * @param data
	 * @param value
	 * @param min
	 * @param max
	 */
	private static void doSearch_bak(int[] data, int value, int min, int max)
	{
		int mid = (min+max)/2;
		System.out.print("min:" + min);
		System.out.print(" max:" + max);
		System.out.println(" mid:" + mid);
		if(data[mid]==value)
		{
			System.out.println("找到数据:" + value);
			System.out.println("********************");
			System.out.println();
		}
		else if(value<data[mid])
		{
			System.out.println("数据在前半区");
			doSearch_bak(data, value, min, mid);
		}
		else if(value>data[mid])
		{
			System.out.println("数据在后半区");
			doSearch_bak(data, value, mid, max);
		}
	}

	private static void doSearch(int[] data, int value, int min, int max)
	{
		if(max-min==1)
		{
			System.out.println("###没有找到数据:" + value);
			System.out.println("********************");
			System.out.println();
			return;
		}
		
		int mid = (min+max)/2;
		System.out.print("min:" + data[min]);
		System.out.print(" max:" + data[max]);
		System.out.println(" mid:" + data[mid]);
		if(data[mid]==value)
		{
			System.out.println("找到数据mid:" + value);
			System.out.println("********************");
			System.out.println();
		}
		else if(value<data[mid])
		{
			System.out.println("数据在前半区");
			doSearch(data, value, min, mid);
		}
		else if(value>data[mid])
		{
			System.out.println("数据在后半区");
			doSearch(data, value, mid, max);
		}
	}
	
	private static void search(int[] data, int value, int min, int max)
	{
		if(data[min]==value || data[max]==value)
		{
			System.out.println("找到数据min max:" + value);
			System.out.println("********************");
			System.out.println();
			return;
		}
		doSearch(data, value, min, max);
	}
	
	
	private static void test01()
	{
		int[] data = new int[100];
		for(int i=0; i<100; i++)
		{
			data[i] = i;
		}
		
		for(int i=0; i<100; i++)
		{
			System.out.println("********************");
			System.out.println("search:" + i);
			search(data, i, 0, 99);
		}
		
	}

	private static void test02()
	{
		int[] data = new int[100];
		for(int i=0; i<100; i++)
		{
			data[i] = 2*i;
		}
		
		for(int i=0; i<200; i++)
		{
			System.out.println("********************");
			System.out.println("search:" + i);
			search(data, i, 0, 99);
		}
		
	}
	
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//test01();
		test02();
	}

}




旧代码
package test;

/**
 * http://www.cn-cuckoo.com/2010/04/20/are-you-one-of-the-10-percent-of-programmers-who-can-write-a-binary-search-1530.html
 * 
 * 二分查找
 * 2010-04-21 12:00 至 2010-04-21 12:36 
 *
 */
public class BinarySearch {
	
	/**
	 * 会出现死循环
	 * @param data
	 * @param value
	 * @param min
	 * @param max
	 */
	private static void doSearch_bak(int[] data, int value, int min, int max)
	{
		int mid = (min+max)/2;
		System.out.print("min:" + min);
		System.out.print(" max:" + max);
		System.out.println(" mid:" + mid);
		if(data[mid]==value)
		{
			System.out.println("找到数据:" + value);
			System.out.println("********************");
			System.out.println();
		}
		else if(value<data[mid])
		{
			System.out.println("数据在前半区");
			doSearch(data, value, min, mid);
		}
		else if(value>data[mid])
		{
			System.out.println("数据在后半区");
			doSearch(data, value, mid, max);
		}
	}

	private static void doSearch(int[] data, int value, int min, int max)
	{
		int mid = (min+max)/2;
		System.out.print("min:" + min);
		System.out.print(" max:" + max);
		System.out.println(" mid:" + mid);
		if(max-min==1)
		{
			System.out.println("找到数据:" + value);
			System.out.println("********************");
			System.out.println();
		}
		else if(data[mid]==value)
		{
			System.out.println("找到数据:" + value);
			System.out.println("********************");
			System.out.println();
		}
		else if(value<data[mid])
		{
			System.out.println("数据在前半区");
			doSearch(data, value, min, mid);
		}
		else if(value>data[mid])
		{
			System.out.println("数据在后半区");
			doSearch(data, value, mid, max);
		}
	}
	
	private static void test01()
	{
		int[] data = new int[100];
		for(int i=0; i<100; i++)
		{
			data[i] = i;
		}
		
		for(int i=0; i<100; i++)
		{
			System.out.println("********************");
			System.out.println("doSearch:" + i);
			doSearch(data, i, 0, 99);
		}
		
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		test01();
	}

}
0
0
分享到:
评论

相关推荐

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

    二分查找算法是一种高效的数据搜索方法,主要应用于已排序的序列。它的基本思想是通过不断地将待搜索区域减半来快速定位目标值。这个过程基于分治策略,将大问题分解为更小的子问题来解决。在二分查找算法中,每次...

    数据结构实验二分查找

    在这个实验报告中,我们关注的是“二分查找”这一数据结构算法,这是一种在有序列表中查找特定元素的方法。 二分查找算法的基本思想是利用排序后的数据特性,每次查找都将搜索范围减半。这种方法极大地提高了查找...

    hash二分查找实验8.rar

    "hash查找"和"二分查找"是两种重要的数据查找算法,它们各自有着独特的应用场景和优势。 首先,我们来看“hash查找”。哈希(Hash)查找基于哈希表,是一种快速的数据定位方法。它通过一个哈希函数将数据的键(Key...

    数据结构实验六(二分查找、Hash查找)题目和源程序

    #### 一、二分查找(Binary Search) **定义与适用条件:** 二分查找是一种在有序数组中查找特定元素的高效算法。为了使用二分查找,数组必须是按照升序或降序排列的,并且通常采用顺序存储结构。 **基本思想:** 1....

    java二分查找算法

    下面基于给定的部分代码片段,详细介绍二分查找算法的具体实现。 #### 三、关键代码解析 给定代码中定义了一个名为`OrdArray`的类,该类实现了二分查找算法。其中的关键方法为`find()`,用于执行查找操作。 ```...

    数据结构顺序查找

    实验代码部分应包含两个函数,分别实现顺序查找和二分查找。对于顺序查找,代码会从数组的首元素开始,依次比较直到找到目标元素或遍历完数组。对于二分查找,代码应先计算中间元素的索引,然后根据目标值与中间元素...

    数据结构 二分查找 上机实验

    ### 数据结构之二分查找详解及上机实验 #### 一、引言 在计算机科学领域,二分查找(Binary Search)是一种高效的查找算法,它适用于已排序的数组或列表。该算法通过不断地将查找区间减半来缩小查找范围,从而达到...

    查找算法代码C++——包括顺序、二分、BST、哈希

    本资源提供了C++实现的四种主要查找算法:顺序查找、二分查找、BST(二叉搜索树)查找以及哈希查找。下面将详细阐述这四种查找算法及其在C++中的实现。 1. **顺序查找**: 顺序查找是最基础的查找方法,适用于任何...

    《数据结构》 查找和排序 实验报告

    在实验报告的程序源代码中,可以看到包含了主函数和各个功能函数的实现,如`S_Search`(顺序查找)、`Binary_Search`(二分查找)、`D_Insertsort`(直接插入排序)、`Select_Sort`(直接选择排序)和`Bubble_Sort`...

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

    递归版本的二分查找代码会直接调用自身,根据比较结果调整搜索范围;而非递归版本则使用循环,通过更新左右边界来控制搜索范围,直至找到目标元素或搜索范围为空。 **算法的时间复杂度分析** 二分查找的时间复杂度...

    华中科技大学算法设计与分析实验代码-大数乘法+最近点对问题+最优二分查找树+所有点的最短路径

    在本压缩包中,包含的是华中科技大学算法设计与分析实验的四个重要主题:大数乘法、最近点对问题、最优二分查找树以及所有点的最短路径。接下来,我们将逐一深入探讨这些知识点。 1. **大数乘法**: 大数乘法是...

    二分查找、插值查找、斐波那契查找对比C++的实现

    本文将详细介绍三种常见的查找算法:二分查找、插值查找和斐波那契查找,并以C++语言为例,阐述它们的核心实现原理。 1. **二分查找(Binary Search)** 二分查找是一种基于有序数组的高效查找算法。它的工作原理...

    《数据结构与算法》-李春葆 实验报告-典型查找算法实践-二分查找、分块索引查找

    在本实验报告中,我们关注的是两种常见的查找算法——二分查找和分块索引查找,它们都是在数据结构和算法领域中极为重要的概念。这两种查找算法主要应用于处理有序序列,能够有效地提高查找效率。 首先,二分查找是...

    数据查找实验报告

    - **折半查找**:也称为二分查找,适用于已排序的表。`Search_Bin`函数通过不断将查找范围减半来提高效率。这种方法在大表中比顺序查找更快,但要求表必须有序。 2. **动态查找表**: - **二叉排序树**:这是一种...

    二分查找和二叉排序树(C++实现)

    二分查找和二叉排序树是计算机科学中两种重要的数据结构和算法,它们在处理大量数据时具有高效性。下面将详细介绍这两种概念及其C++实现的关键点。 首先,二分查找是一种在有序数组中查找特定元素的搜索算法。其...

    二分查找算法BinarySearch.rar

    二分查找的MATLAB代码通常会包含一个函数,输入为有序数组和目标值,输出为目标值在数组中的索引或找不到时返回特殊值(如-1)。 ```matlab function index = binarySearch(arr, target) left = 1; right = ...

    算法设计与分析实验_二分检索的递归实现

    本实验重点探讨了二分检索(又称二分查找)的递归实现,这是一种在有序数组中寻找特定元素的有效方法。在此,我们将深入探讨二分检索的基本概念,递归的原理以及如何在C++中实现这一算法。 二分检索的核心思想是在...

    模拟实验-C#版基于二分查找的稳定“插入排序”算法

    在本模拟实验中,我们关注的是使用C#编程语言实现基于二分查找的稳定“插入排序”算法。插入排序是一种简单直观的排序算法,它的工作原理是通过构造一个有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到...

    3种查找算法——数据结构实验

    本实验主要探讨了三种基本的查找算法:顺序查找、折半查找(二分查找)和索引查找,这些算法都是在数组或集合中寻找特定元素的重要方法。下面将详细解释这三种查找算法,并结合C语言编程环境进行深入分析。 1. **...

Global site tag (gtag.js) - Google Analytics