新代码
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();
}
}
分享到:
相关推荐
二分查找算法是一种高效的数据搜索方法,主要应用于已排序的序列。它的基本思想是通过不断地将待搜索区域减半来快速定位目标值。这个过程基于分治策略,将大问题分解为更小的子问题来解决。在二分查找算法中,每次...
在这个实验报告中,我们关注的是“二分查找”这一数据结构算法,这是一种在有序列表中查找特定元素的方法。 二分查找算法的基本思想是利用排序后的数据特性,每次查找都将搜索范围减半。这种方法极大地提高了查找...
"hash查找"和"二分查找"是两种重要的数据查找算法,它们各自有着独特的应用场景和优势。 首先,我们来看“hash查找”。哈希(Hash)查找基于哈希表,是一种快速的数据定位方法。它通过一个哈希函数将数据的键(Key...
#### 一、二分查找(Binary Search) **定义与适用条件:** 二分查找是一种在有序数组中查找特定元素的高效算法。为了使用二分查找,数组必须是按照升序或降序排列的,并且通常采用顺序存储结构。 **基本思想:** 1....
下面基于给定的部分代码片段,详细介绍二分查找算法的具体实现。 #### 三、关键代码解析 给定代码中定义了一个名为`OrdArray`的类,该类实现了二分查找算法。其中的关键方法为`find()`,用于执行查找操作。 ```...
实验代码部分应包含两个函数,分别实现顺序查找和二分查找。对于顺序查找,代码会从数组的首元素开始,依次比较直到找到目标元素或遍历完数组。对于二分查找,代码应先计算中间元素的索引,然后根据目标值与中间元素...
### 数据结构之二分查找详解及上机实验 #### 一、引言 在计算机科学领域,二分查找(Binary Search)是一种高效的查找算法,它适用于已排序的数组或列表。该算法通过不断地将查找区间减半来缩小查找范围,从而达到...
本资源提供了C++实现的四种主要查找算法:顺序查找、二分查找、BST(二叉搜索树)查找以及哈希查找。下面将详细阐述这四种查找算法及其在C++中的实现。 1. **顺序查找**: 顺序查找是最基础的查找方法,适用于任何...
在实验报告的程序源代码中,可以看到包含了主函数和各个功能函数的实现,如`S_Search`(顺序查找)、`Binary_Search`(二分查找)、`D_Insertsort`(直接插入排序)、`Select_Sort`(直接选择排序)和`Bubble_Sort`...
递归版本的二分查找代码会直接调用自身,根据比较结果调整搜索范围;而非递归版本则使用循环,通过更新左右边界来控制搜索范围,直至找到目标元素或搜索范围为空。 **算法的时间复杂度分析** 二分查找的时间复杂度...
在本压缩包中,包含的是华中科技大学算法设计与分析实验的四个重要主题:大数乘法、最近点对问题、最优二分查找树以及所有点的最短路径。接下来,我们将逐一深入探讨这些知识点。 1. **大数乘法**: 大数乘法是...
本文将详细介绍三种常见的查找算法:二分查找、插值查找和斐波那契查找,并以C++语言为例,阐述它们的核心实现原理。 1. **二分查找(Binary Search)** 二分查找是一种基于有序数组的高效查找算法。它的工作原理...
在本实验报告中,我们关注的是两种常见的查找算法——二分查找和分块索引查找,它们都是在数据结构和算法领域中极为重要的概念。这两种查找算法主要应用于处理有序序列,能够有效地提高查找效率。 首先,二分查找是...
- **折半查找**:也称为二分查找,适用于已排序的表。`Search_Bin`函数通过不断将查找范围减半来提高效率。这种方法在大表中比顺序查找更快,但要求表必须有序。 2. **动态查找表**: - **二叉排序树**:这是一种...
二分查找和二叉排序树是计算机科学中两种重要的数据结构和算法,它们在处理大量数据时具有高效性。下面将详细介绍这两种概念及其C++实现的关键点。 首先,二分查找是一种在有序数组中查找特定元素的搜索算法。其...
二分查找的MATLAB代码通常会包含一个函数,输入为有序数组和目标值,输出为目标值在数组中的索引或找不到时返回特殊值(如-1)。 ```matlab function index = binarySearch(arr, target) left = 1; right = ...
本实验重点探讨了二分检索(又称二分查找)的递归实现,这是一种在有序数组中寻找特定元素的有效方法。在此,我们将深入探讨二分检索的基本概念,递归的原理以及如何在C++中实现这一算法。 二分检索的核心思想是在...
在本模拟实验中,我们关注的是使用C#编程语言实现基于二分查找的稳定“插入排序”算法。插入排序是一种简单直观的排序算法,它的工作原理是通过构造一个有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到...
本实验主要探讨了三种基本的查找算法:顺序查找、折半查找(二分查找)和索引查找,这些算法都是在数组或集合中寻找特定元素的重要方法。下面将详细解释这三种查找算法,并结合C语言编程环境进行深入分析。 1. **...