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

二分法查找

 
阅读更多
import java.util.Arrays;

/**
 * 
* @项目名称:Test   
* @类名称:BinarySearch   
* @类描述:   二分法查找
* @创建人:Ansj   
* @创建时间:2011-9-13 下午02:53:47  
* @修改备注:   
* @version    
*
 */
public class BinarySearch {
	public static void main(String[] args) {
		int[] ints = {12,123,21,123,1,432,23,42,3,123,124,3,5435,66,456554,435,423,42,1} ;
		
		int find = 66 ;
		
		//先对数组排序
		Arrays.sort(ints) ;
		
		for (int i = 0; i < ints.length; i++) {
			new BinarySearch().search(ints, ints[i]) ;
		}
		
		
	}
	
	public void search(int[] ints , int find){
		search(ints,0,ints.length,find) ;
	}
	
	
	public void search(int[] ints , int start , int end , int find){
		if(ints[(start+end)/2]==find){
			System.out.println((start+end)/2);
		}else if(ints[(start+end)/2] > find){
			search(ints , start , (start+end)/2 , find) ;
		}else{
			search(ints , (start+end)/2 , end , find) ;
		}
	}
	
}
分享到:
评论
4 楼 ansjsun 2011-09-25  
yinpeng21cn 写道
Arrays.sort(ints)用来做什么?排序;排序用来做什么?介绍二分法查找算法;
其实想想,真正sort的时候都能对数组排序了,为什么不能当时就找出需要的那个数字呢?
所以我觉得不要用sort方法排序了,自己写一个吧,时间复杂度会更小。

二分查找法的是建立在一次排序多次查找的基准上的..
如果就是为了在无序状态下一次查找..用二分就脑残了..

排序有排序的算法...不是这个的需求啊
3 楼 yinpeng21cn 2011-09-24  
Arrays.sort(ints)用来做什么?排序;排序用来做什么?介绍二分法查找算法;
其实想想,真正sort的时候都能对数组排序了,为什么不能当时就找出需要的那个数字呢?
所以我觉得不要用sort方法排序了,自己写一个吧,时间复杂度会更小。
2 楼 ansjsun 2011-09-15  
liubing539 写道
还 你的二分法当赋值给find的参数 在数组ints里没有的话,就会报异常,我把你的程序改了下 就能用了 谢谢!
public static void main(String[] args) {
int[] ints = { 12, 12, 11, 9, 10, 5, 7, 1, 1 };
int start = 0;
int end = ints.length;

int find = 5;

// 先对数组排序
Arrays.sort(ints);

new Test().search(ints, start, end, find);
}

public int search(int[] ints, int start, int end, int find) {
int flag = 0;
if (ints[(start + end) / 2] == find) {
System.out.println(ints[(start + end) / 2]);
flag = 1;
return flag;
} else if ((end - start) <= 1) {
if (ints[start] == find) {
System.out.println(ints[start]);
flag = 1;
return flag;
} else if (ints[end] == find) {
System.out.println(ints[end]);
flag = 1;
return flag;
} else {
flag = 0;
return flag;
}
} else if (ints[(start + end) / 2] > find) {
if (start < (start + end) / 2) {
end = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}

} else {
if ((start + end) / 2 < end) {
start = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}

}

return flag;
}

其实很早以前写过..这次想用递归写还是没写好..一次写完也没仔细测呵呵..谢谢你提的意见...

这是标准的二分代码..和jdk写的一样


public static void main(String[] args) {
		int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 15, 22, 232 };
		for (int i = 0; i < array.length; i++) {
			System.out.println(erFen(array,array[i])) ;
		}
	}

	public static boolean erFen(int[] array, int num) {
		int begin = 0;
		int end = array.length - 1;

		while (begin <= end) {
			int mid = (begin + end) / 2;
			if (array[mid] > num) {
				end = mid -1 ;
			} else if (array[mid] < num) {
				begin = mid +1 ;
			} else {
				return true;
			}
		}

		return false;
	}
1 楼 liubing539 2011-09-15  
还 你的二分法当赋值给find的参数 在数组ints里没有的话,就会报异常,我把你的程序改了下 就能用了 谢谢!
public static void main(String[] args) {
int[] ints = { 12, 12, 11, 9, 10, 5, 7, 1, 1 };
int start = 0;
int end = ints.length;

int find = 5;

// 先对数组排序
Arrays.sort(ints);

new Test().search(ints, start, end, find);
}

public int search(int[] ints, int start, int end, int find) {
int flag = 0;
if (ints[(start + end) / 2] == find) {
System.out.println(ints[(start + end) / 2]);
flag = 1;
return flag;
} else if ((end - start) <= 1) {
if (ints[start] == find) {
System.out.println(ints[start]);
flag = 1;
return flag;
} else if (ints[end] == find) {
System.out.println(ints[end]);
flag = 1;
return flag;
} else {
flag = 0;
return flag;
}
} else if (ints[(start + end) / 2] > find) {
if (start < (start + end) / 2) {
end = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}

} else {
if ((start + end) / 2 < end) {
start = (start + end) / 2;
search(ints, start, end, find);
} else {
flag = -1;
return flag;
}

}

return flag;
}

相关推荐

    数据结构快速排序二分法查找

    "数据结构快速排序二分法查找" 快速排序和二分法查找是数据结构中两个非常重要的概念,它们都是解决实际问题的重要工具。在本文中,我们将详细介绍快速排序和二分法查找的原理、实现和应用。 快速排序 快速排序...

    java算法——二分法查找

    二分法查找 *进行二分法查找的前提是数组已有序 *查找范围的上下界

    Java程序设计基础:一维数组应用查找二分法查找).pptx

    ——二分法查找 目录 课程导入 1 清楚并牢记二分法的实现条件 2 理解二分法的实现思路 3 读懂二分法的实现代码 数组的查找——二分法查找 也称拆半查找法,是一种高效的查找方法,前提条件是数组元素必须已经按升序...

    二分法查找算法代码 c语言实现

    二分法查找,又称折半查找,是一种在有序数组中搜索特定元素的高效算法。它通过不断缩小搜索范围,将查找复杂度降低到对数级别,显著提高了查找效率。在这个资源包中,我们重点关注的是使用C语言实现的二分法查找...

    c语言 二分法查找

    ### C语言中的二分法查找 #### 知识点概览 1. **二分法查找的基本原理** 2. **二分法查找的适用场景** 3. **算法实现细节** 4. **时间复杂度分析** 5. **空间复杂度分析** 6. **代码示例与分析** 7. **常见问题及...

    图解数据结构二分法查找法

    ### 图解数据结构:二分法查找法 #### 一、引言 在计算机科学领域,数据结构与算法是核心的基础知识。其中,查找算法作为数据处理中的关键环节,其效率直接影响着系统的性能。二分查找法(Binary Search),作为一...

    学学Python_34函数_创建函数04 二分法查找

    本篇文章将聚焦于一个重要的查找算法——二分法查找,它在处理大规模有序数据时表现出极高的效率。 二分法查找,也称为折半查找,是一种在有序数组中查找特定元素的搜索算法。其基本思想是通过不断将待搜索区间减半...

    二分法查找在PLC编程中的应用.pdf

    二分法查找是一种高效的查找算法,在有序数组中尤其适用。其基本思想是从已排序数组的中间元素开始查找,如果目标值与中间元素相等,则查找成功;如果目标值小于中间元素,则在数组的左半部分继续查找;如果目标值...

    java 冒泡算法和插入法排序,二分法查找

    本文将深入探讨Java中的冒泡排序、插入排序以及二分法查找这三种基础算法,这些都是面试时经常会被问到的技术点。 首先,让我们从冒泡排序开始。冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数列,一次...

    写出二分法查找算法函数实现。

    ### 二分法查找算法详解 #### 一、引言 二分法查找(Binary Search),也称为折半查找,是一种在有序数组中查找特定元素的高效算法。它的工作原理是通过将查找区间不断地对半分来缩小查找范围,直至找到目标元素或...

    二分法查找MATLAB程序

    使用二分法查找的MATLAB程序编写,方便刚接触MATLAB的同学分享学习。

    要求演示二分法查找过程

    题目要求演示二分法查找过程,用箭头跟踪指示出二分查找过程中的查找位置。设计思想为用两个数组实现,一个用于存数据另一个用来存箭头。只要存箭头的下标于每次查找的数的下标相等就可以实现,难点在于如何把数得...

    易语言有序二分法查找

    **易语言有序二分法查找**是一种在已排序的数据序列中快速查找特定元素的高效算法。易语言,作为中国本土的编程语言,以其简洁的语句和易学性深受初学者喜爱。在这个主题中,我们将深入探讨有序二分法查找的原理、...

    改进的二分法查找

    二分法查找是一种在有序数据集中高效定位特定元素的算法,其基本原理是将有序数列对半分隔,通过比较目标值与中间值的关系来确定查找的范围,进而缩小搜索区间,直至找到目标值或判断目标值不存在。在含有n个元素的...

    数据结构之二分法查找和散列查找实验

    二分法查找和散列查找是两种常用的查找算法,它们在不同的场景下有着各自的优势。 首先,我们来详细讨论二分法查找。二分法查找(Binary Search)是一种在有序数组中查找特定元素的搜索算法。它的基本思想是将数组...

    C语言实现的二分法快速查找|二分法排序|二分法查找C#

    根据给定的文件信息,我们可以深入探讨二分查找算法在C语言中的实现,以及其在C#中的应用可能性。二分查找(Binary Search),又称折半查找,是一种在有序数组中查找特定元素的搜索算法。搜索过程从数组的中间元素...

    二分法查找(c++版)

    二分法查找,又称折半查找,是一种在有序数组中高效地查找特定元素的搜索算法。这种方法的关键在于利用数组的有序性,通过不断缩小搜索范围来快速定位目标值。在这个C++版本的二分法查找中,我们将深入理解其原理,...

    Java二分法查找数组元素.zip

    二分法查找是一种常用的查找算法,也称为折半查找。它适用于有序数组中查找某个元素的位置。二分法查找的思路是将数组分成两部分,每次查找都将待查找区间缩小一半,直到找到目标元素或者待查找区间为空为止。 ...

Global site tag (gtag.js) - Google Analytics