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

原创 2013年12月02日 10:47:56

折半查找(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不能执行的情况;

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


命令行java -classpath D:\eclipse\dropins\stdlib.jar; BinarySearch tinyW.txt < tinyT.txt


代码如下:

/*
 * 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);
		}
	}
}


输出:




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

折半查找(Binary Search)

1. 图示 2. 代码 int binarySearch(int *a, int left, int right, int target) { if (a == 0 || left ...

BinarySearch二分查找算法

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

数据结构算法之--折半查找(二分查找BinarySearch)

二分查找定义:     二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,...

BinarySearch(二分查找)

//二分查找 package Algorithms; import java.util.Arrays; import edu.princeton.cs.algs4.In; import edu.p...

二分查找(折半查找)算法及代码

二分査找也称折半査找,其优点是查找速度快,缺点是要求所要査找的数据必须是有序序列。该算法的基本思想是将所要査找的序列的中间位置的数据与所要査找的元素进行比较,如果相等,则表示査找成功,否则将以该位置为...

【数据结构与算法】【查找】折半查找(二分查找)的代码实现

折半查找(Binary Search):也称为二分查找。它的前提是:1、线性表中的记录必须是关键字有序(通常是从小到大有序);2、线性表必须采用顺序存储。 折半查找的基本思想是:在有序表中,取中间记...
  • jay_yin
  • jay_yin
  • 2014年11月04日 19:38
  • 1915

Princeton Algorithms: Part 1 [week 4: Binary Search Trees]

Exercises

LeetCode Algorithms 98. Validate Binary Search Tree 题解

题目:判断一棵树是否为BST树 因为BST广为人知,所以就不搬原文了,其中节点的数值是int类型。对于BST树,对它做中序遍历即可输出排好序的一串数字,那么对于这个题目就有两个思路: 1. 对这棵...

LeetCode Algorithms 98. Validate Binary Search Tree

题目难度: Medium 原题描述: Given a binary tree, determine if it is a valid binary search tree (B...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Algorithms - 折半查找(binary search) 算法 及 代码
举报原因:
原因补充:

(最多只允许输入30个字)