java实现的二分查找

7人阅读 评论(0) 收藏 举报
分类:
package javal.util.test;

public class TowFind {
	
	public static void main(String[] args) {
		System.out.println(find(new long[] {1,2,3,4,5,6,7,8},8));
	}
	
	public static int find (long[] array,long searchKey) {
		int lowerBound = 0;
		int upperBound =array.length;
		
		int curIn;
		
		while(true) {
			curIn = (lowerBound + upperBound) /2;
			if (array[curIn] == searchKey)
			{
				return curIn;
			}
			else if(lowerBound > upperBound)
			{
				return -1; //没有找到该数据
			}
			else
			{
				if(array[curIn] < searchKey) {
					lowerBound = curIn + 1;
				}
				else
				{
					upperBound = curIn -1;
				}
			}
		}
	}
}

        二分查找需要注意的几点:

        1.数组必须是有序的
        2.设置最小查找点min  和最大查找点 max

        3.比较查找目标 tar 与  res=sum(min + max) /2 的值   根据比较结果  改变 最小查找点和最大查找点 

                  如果 tar == res  则返回
                  如果 tar  <  res   则说明  tar 在 [min,res) 之间  即   max = res  - 1  重新查找

                  如果 tar  >  res   则说明  tar 在 (res,max] 之间  即   min =  res +1  重新查找    


如何删除数组中的一个元素

	public static long[] delete(long[] array,long searchKey) {
		int index = find(array,searchKey);
		int len = array.length;
		if(index == -1) {
			return array;
		}
		for(int x=index; x < len-1; x++) {
			array[x] = array[x+1];
		}
		long[] arraycopy = new long[len -1];
		arraycopy=Arrays.copyOf(array, len -1);
		return arraycopy;
	}

        有序数组查找速度要比无序数组快,但是插入操作中由于所有靠后的数据都需要移动腾出地方,所以速度较慢,有序数组和无序数组的删除操作都很慢,因为数据项必须向前移动来填补已删除数据项的位置。

         ps :已知一个数组的范围,如何求出 使用二分查找的最大次数?
          step = log2 sum
              step : 最大次数
              sum : 数组长度
         或者 step = log10 sum    *  3.322
                

        
查看评论

java实现二分查找-两种方式

二分查找是一种查询效率非常高的查找算法。又称折半查找。 起初在数据结构中学习递归时实现二分查找,实际上不用递归也可以实现,毕竟递归是需要开辟额外的空间的来辅助查询。本文就介绍两种方法 二分...
  • maoyuanming0806
  • maoyuanming0806
  • 2017-10-08 20:02:02
  • 2023

java实现非递归版二分查找算法

1.介绍 二分查找算法就是从中间位置开始比较,然后就是分为小于中值区域Z1和大于中值的区域Z2,然后判断中值和查找的数,比中值小在Z1,大于中值在Z2,采用不断缩小搜索范围,然后确定。 2....
  • ya_1249463314
  • ya_1249463314
  • 2016-09-18 23:26:07
  • 1391

二分查找的两种实现方式(JAVA)

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表...
  • as02446418
  • as02446418
  • 2015-08-11 22:22:45
  • 4069

二分查找 java实现

折半排序法(二分插入排序法)排序原理:其实也属于插入法类型,分已排序和未排序部分.然后将未排序部分元素逐个排序插入,但是插入的过程不同,需要每次求一个中间位置,和中间位置元素比较大小,然后根据大小情况...
  • qq_23217629
  • qq_23217629
  • 2016-09-08 22:10:02
  • 558

java实现递归版二分查找算法

递归的特点? 1.玩递归主要就是去尝试解决一下规模更小的问题,采用递归将问题收敛到最简单的情况解决。 2.由1可知,递归肯定是有一个最简单的情况。 3.递归调用的父问题和准备解决的子问题之间不应...
  • ya_1249463314
  • ya_1249463314
  • 2016-09-20 23:21:58
  • 2978

二分查找java实现

  • 2013年07月16日 13:01
  • 6KB
  • 下载

Java实现二分查找算法(元素可重复)

public class BinarySearch { public static void main(String[] args) { int[] arrays = new int[]{1,2...
  • wbb_1216
  • wbb_1216
  • 2017-03-01 14:52:35
  • 1511

Java实现数组二分查找及递归二分查找

public void binarySearch(int value){ int low = 0; int upper = nElements - 1; int currtIn = (low+u...
  • lingzhm
  • lingzhm
  • 2015-03-09 12:58:29
  • 1698

实现二分查找树的迭代器(Binary Search Tree Iterator )

Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the ro...
  • slowdreamer
  • slowdreamer
  • 2015-05-09 16:10:32
  • 387

java使用递归和非递归实现二分查找

二分查找
  • HibonLi
  • HibonLi
  • 2017-03-23 18:41:21
  • 269
    个人资料
    等级:
    访问量: 0
    积分: 183
    排名: 0
    文章存档