前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java中二分查找(折半查找)的写法

java中二分查找(折半查找)的写法

作者头像
用户1696846
发布2018-07-16 16:12:26
8770
发布2018-07-16 16:12:26
举报
文章被收录于专栏:Android自学Android自学

代码如下,其他的不多叙述,看注释即可

代码语言:javascript
复制
/**
 * 二分查找两种写法
 */
package array;
 
import java.util.Arrays;
 
/**
 * 
 * @author lizhongfeng_李忠峰
 * @fileinfo Test array ArrayDemo.java
 * @time 2015年9月12日
 */
 
public class ArrayDemo {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = { 13, 15, 19, 28, 33, 45, 78, 106 };
		System.out.println(halfSearch(arr, 33));
		System.out.println(halfSearch2(arr, 33));
		System.out.println(insert(arr, 5));
		System.out.println(Arrays.binarySearch(arr, 33));// 使用java内置函数查找,不存在时返回的num= -插入位置-1
	}
 
	// 写法①
	// 先判断中间值是不是key,如果不是再和中间值比较,循环知道找到或者循环结束;
	public static int halfSearch(int[] arr, int key) {
		int max, min, mid;
		min = 0;
		max = arr.length - 1;
		mid = (max + min) / 2; // 循环判断要用到,所以要先计算,方法②用不到,可以直接写在循环里面;
		while (arr[mid] != key) {
			if (key > arr[mid]) {
				min = mid + 1;
			} else if (key < arr[mid]) {
				max = mid - 1;
			}
			if (max < min) {
				return -1;
			}
			mid = (min + max) / 2;
		}
		return mid;
	}
 
	// 写法②
	// 先判断小的角标是不是比大的角标大,如果大,说明已经循环结束了。
	public static int halfSearch2(int[] arr, int key) {
		int min, max, mid;
		min = 0;
		max = arr.length - 1;
		while (min <= max) {
			mid = (min + max) / 2;
			if (key > arr[mid]) {
				min = mid + 1;
			} else if (key < arr[mid]) {
				max = mid - 1;
			} else {
				return mid;
			}
		}
		return -1;
	}
 
	// 插入一个值时,大小序时应该插入的位置
	public static int insert(int[] arr, int key) {
		int min, max, mid;
		min = 0;
		max = arr.length - 1;
		while (min <= max) {
			mid = (min + max) / 2;
			if (key > arr[mid]) {
				min = mid + 1;
			} else if (key < arr[mid]) {
				max = mid - 1;
			} else {
				return mid;
			}
		}
		return min;
	}
 
}

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档