[Java]Java实现二分查找

[Java]Java实现二分查找

二分查找 又称为 折半查找,是一种常见而且效率较高的查找方式。但是二分查找要求线性表必须采用顺序存储结构,而且表中元素按照关键字排列

其流程图如下:

来源:百度图片

例子:

例:查找有序数组{10,11,12,16,18,23,29,33,48,54,57,68,77,84,98}中的元素23
Tips:lo代表low,hi代表high,mid代表middle

lo          mid        hi
↓           ↓          ↓
10 11 12 16 18 23 29 33 48 54 57 68 77 84 98

lo   mid   hi
↓      ↓    ↓
10 11 12 16 18 23 29 33 48 54 57 68 77 84 98

                     lomidhi
      ↓  ↓ ↓
10 11 12 16 18 23 29 33 48 54 57 68 77 84 98

以下是代码展示:

package Basic;

import java.util.Arrays;
import java.util.Scanner;

public class BinarySearch {
	public static int rank(int key, int[] a) {
		//数组必须是有序的
		int low = 0;
		int high = a.length - 1;
		while ( low <= high ) {
			//被查找的键要么不存在,要么必定处于low和high之间
			int mid = low + (high - low) / 2;
			if (key < a[mid])
				high = mid - 1;
			else if (key > a[mid])
				low = mid + 1;
			else
				return mid;
		}
		return -1;//数组中没有对应数字则返回-1
	}
	
	//以下是例子
	public static void main(String[] args) throws Exception{
		Scanner reader = new Scanner(System.in);
		System.out.println("请输入数组长度");
		int length = reader.nextInt();
		
		//创建数组并给数组赋值
		int[] whitelist = new int[length];
		for (int i = 0; i<length; i++) {
			System.out.println("请输入第" + i +"个数组元素的值");
			whitelist[i] = reader.nextInt();
		}
		Arrays.sort(whitelist);//将数组由大到小排列
		System.out.println("请输入需要查找的数字");
		int key = reader.nextInt();
		int index = rank(key, whitelist);
		System.out.println(index);
	}
}
发布了4 篇原创文章 · 获赞 3 · 访问量 260

猜你喜欢

转载自blog.csdn.net/weixin_45434953/article/details/104227651