Algorithms - 折半查找(binary search) 算法 及 代码

折半查找(binary search) 详解及代码


本文地址:http://blog.csdn.net/caroline_wendy/article/details/17068019


折半查找, 又称二分查找(binary search), 需要数组有序(sort), 通过比较数组的中间数据(中心偏向较小的方法), 确定查找值的范围;

直到中值等于查找值, 则查找成功; 如果未成功, 则重置数据, 判断首尾位置的大小, 再进行中值比较; 判断失败, 则数据不存在;

注意:

1. Eclipse无法重定向(redirect)输入文件(file), 只能读入数据;

2. 使用cmd重定向输入文件, 则需要解压"stdlib.jar", 取出相应的class(In, Out, StdIn, StdOut), 放入执行目录, 否则会报错:

错误:java.lang.NoClassDefFoundError, 即找不到相应的class文件, 会出现Eclipse可以执行, cmd不能执行的情况;

代码主要功能: 判断是否查找成功, 失败则输出查找数据;

代码如下:

/*
 * Algorithms.java
 *
 *  Created on: 2013.12.02
 *      Author: Wendy
 */

/*eclipse std kepler, stdlib.jar*/

import java.util.Arrays;

public class Algorithms
{
	/*折半查找算法(binary search)*/
	public static int rank(int key, int[] a)
	{
		int lo = 0;
		int hi = a.length - 1;
		while (lo <= hi)
		{
			int mid = lo + (hi - lo) /2; //整数向下取整
			if (key < a[mid]) hi = mid - 1;
			else if(key > a[mid]) lo = mid + 1;
			else return mid;
		}
		return -1;
	}
	
	public static void main(String[] args)
	{
		In in = new In(args[0]);
		int[] whitelist = in.readAllInts(); //读取原始数组
		Arrays.sort(whitelist); //排序
		while(!StdIn.isEmpty()) //判断重定向数据是否为空
		{
			int key = StdIn.readInt();
			if(rank(key, whitelist) == -1) //输出不存在的数据
				StdOut.println(key);
		}
	}
}


输出:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值