以前工作过程中学习的过程中写了很多测试程序,上周acer本本硬盘坏了,换了个新硬盘,数据全部丢失了,很多有用的东西就这样没了,可惜的很。以后把工作和学习中的到的东西还是放到网上来比较好点。
最近,在论坛上看到有个人搞了个每日一题,觉得挺不错。最近在看数据结构,想想是否也可以来个每天看看数据结构。觉得那些东西虽然不是很难,但是若是坚持一段时间,量变必然会产生质变。而且每天花点时间在英语上,那么也会产生效果,背诵新概念的工程也该重启了,以前背了一段时间的,现在又忘了。
javaeye月刊上有一个关于24点算法的讨论,很多人也参入讨论,有人说看谁20行以内解决,似乎不可能,不过参入讨论给的代码都比我的要长很多,看来自己还不是太笨。数据机构不会每天都写,但是每天都会看点,过段时间把排序的多个方法总结下,希望09年有所提高。昨天写的个利用归并和递归来实现的排序,有些问题,在4个数的时候是正确的,多于四个数字的时候,有一个数字不正确,还没找到原因。先把学习的一个递归二分查找贴出来。
二分查找
int[] binary = {1,2,3,4,5,6,7,8,9};
int lower = 0;
int upper = binary.length-1;
int curIn;
int searchNum = 6;
while(true)
{
curIn = (upper + lower)/2;
if(binary[curIn] == searchNum)
{
System.out.println(searchNum + "存在于数组的" + curIn + "位置");
return;
}else if(upper < lower)
{
System.out.println(searchNum + "在数组中不存在");
return;
}else{
if(binary[curIn]>searchNum)
{
upper = curIn - 1;
}else if(binary[curIn]<searchNum)
{
lower = curIn + 1;
}
}
}
二分查找的递归实现,属于分治算法。分治算法, 常常是一个方法,这个方法中包含两个对自身的递归调用,但是只有一个真的执行了。
static int[] binary = {1,2,3,4,5,6,7,8,9};
public static void main(String[] args) {
int lower = 0;
int upper = binary.length;
int searchNum = 6;
binarySearch(searchNum,lower,upper);
}
private static void binarySearch(int searchNum, int lower, int upper) {
int curItem = (lower + upper)/2;
if(binary[curItem] == searchNum)
{
System.out.println(searchNum + "在数组的" + curItem + "位置上");
}else if(lower>upper)
{
System.out.println("不存在该值");
}
else
{
if(binary[curItem]>searchNum)
{
binarySearch(searchNum,lower,curItem-1);
}
if(binary[curItem]<searchNum)
{
binarySearch(searchNum,curItem+1,upper);
}
}
}
分享到:
相关推荐
分治法实现二分查找算法实现 分治法实现二分查找算法实现 分治法实现二分查找算法实现
二分查找基于分治算法的实现
**二分查找与分治算法详解** 二分查找是一种基于分治策略的高效搜索算法,主要应用于有序数据集合。在给定的升序排列的数组a[0:n-1]中,二分查找的目标是找到特定元素x的位置,或者确认元素不在数组中。算法的基本...
'C语言分治法实现二分查找源码'一文提供了一个使用C语言实现的二分查找算法源码,该算法可以在数组中快速查找指定的数字。下面是该源码的详细分析: 二分查找算法简介 二分查找算法是一种高效的查找算法,它通过将...
`Binary_Search_test`文件可能包含了这些测试用例,用于检查我们的二分查找实现是否符合预期。 二分查找算法在实际应用中非常广泛,例如在数据库索引、大规模数据检索和搜索优化等领域都有应用。理解并能熟练掌握二...
在给定的标题“二分查找算法”和描述“二分查找,完整工程文件,源代码,VS2010”中,我们可以推测这可能是一个关于如何实现二分查找算法的C++项目,使用了Visual Studio 2010作为开发环境。 二分查找算法的基本...
在本实验报告中,具体应用了分治算法的一个经典实例——【二分搜索】,也称为折半查找。二分搜索主要应用于已排序的序列中,通过比较目标值与序列中间元素的大小关系,来决定在序列的左半部分还是右半部分继续搜索,...
二分搜索算法是一种高效查找策略,它基于分治法(Divide and Conquer)思想,广泛应用于有序数据集合。在本项目中,我们利用C++编程语言实现了这一算法,以解决《算法分析与设计》一书中的相关练习题。 首先,理解...
`binarySearch_NotRecursion()`函数是非递归的二分查找实现,而`binarySearch_Recursion()`函数则是递归版本的实现。递归版本通常更具概念清晰性,但可能会占用更多的调用栈空间。 二分查找的时间复杂度是O(logn),...
- **搜索问题**:如二分查找。在有序数组中寻找目标值,每次查找都使搜索范围减半,直到找到目标或确定不存在。 - **矩阵乘法**:Strassen算法通过分解矩阵来减少乘法操作的数量。 - **最短路径问题**:Floyd-...
这个问题可以通过分治算法中的二分查找思想来解决。具体来说,由于方程是单调的,我们可以利用二分查找的思路,在区间[1, 2]内不断缩小包含根的区间范围,直到找到一个足够精确的根。由于f(x)在区间[1, 2]内由负变正...
给定一个有序数组和一个目标值,二分查找会不断地将搜索区间减半,直到找到目标值或者确定不存在。 除了以上提到的算法,分治方法还被应用于很多其他领域,如**大整数乘法**(Karatsuba算法和Toom-Cook算法)、**最...
总之,"低买高卖分治算法"是通过分治策略来解决股票交易中寻找最大利润的问题,其核心在于巧妙地将问题拆分为小问题,并结合二分查找等技术降低时间复杂度。在实际编程实现中,通常涉及对数组的处理和搜索策略的运用...
分治法解决棋盘覆盖与二分查找问题,C++描述.算法设计与分析经典例题
本篇主要介绍使用分治法实现的三个经典算法:二分查找、快速排序以及折半查找。这三种算法在编程实践中具有广泛的应用,并且都是C++语言实现,经验证无误,适用于学习和实际项目。 首先,我们来看二分查找。二分...
1. **算法实现**:使用MATLAB编程语言实现二分查找算法。MATLAB是一款强大的数值计算软件,适合进行算法的快速原型设计和测试。二分查找的MATLAB代码通常会包含一个函数,输入为有序数组和目标值,输出为目标值在...
Java 中实现二分查找的基本步骤如下: 1. 首先,设定查找区间的左右边界,通常为数组的第一个元素索引(0)和最后一个元素索引(数组长度减一)。 2. 计算中间索引,即 (左边界 + 右边界) / 2,确保结果为整数。 3....
二分搜索算法是一种高效的数据查找方法,属于分治策略的典型应用。在已排序的数组中,二分搜索通过不断将查找区间减半来定位目标元素。以下是关于这个实验报告的详细解读: 1. **问题描述**:实验要求在给定的、已...
例如快速排序、归并排序、二分查找等都是基于分治算法的经典实例。 ### 分治算法的设计原则 - **递归性**:分治算法的核心特性之一就是递归性。通过递归调用自身来解决子问题。 - **子问题独立性**:每个子问题...
本实验重点探讨了二分检索(又称二分查找)的递归实现,这是一种在有序数组中寻找特定元素的有效方法。在此,我们将深入探讨二分检索的基本概念,递归的原理以及如何在C++中实现这一算法。 二分检索的核心思想是在...