算法之二分法查找

知之者不如好之者,好之者不如乐之者。
当我们需要在一个有序的数组中需要查找某一个元素是否存在或元素存在的位置时,使用的比较多的就是二分查找也叫折半查找,首先我们来理一下它的查找流程,我们有一张图片来展示:(网页显示图片小,右键选择-在新标签页中打开图片 查看高清原图)
这里写图片描述
下面是实现的代码:

package com.array.text.search;

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

public class BinarySearch {
	public static void main(String[] args) {
	
		// 首先必须是有序的数组才能使用二分查找
		int[] array = { 6, 2, 3, 4, 5, 1, 7 };
		// 将数组从小到大排列顺序为1,2,3,4,5,6,7.
		Arrays.sort(array);
		// 手动输入一个数字查找是否在数组中
		Scanner scanner = new Scanner(System.in);
		System.out.println("请输入数字:");
		int num = scanner.nextInt();
		// 数组第一个元素的下标
		int start = 0;
		// 数组最后一个元素的下标
		int end = array.length - 1;
		//起始下标必须小于最后一个元素的下标
		while (start <= end) {
			// 中间元素的下标
			int mid = (start + end) / 2; 
			if (num > array[mid]) {// 说明num在数组得右边
				start = mid + 1;
			} else if (num < array[mid]) {// 说明num在数组得左边
				end = mid - 1;
			} else {// 说明array[mid] = num;
				System.out.println(num + "在数组的第" + mid + "位");
				break;// 找到后退出循环
			}
		}

	}
}

需要注意的是其中start>=end条件表示满足整个数组都能查找到一遍。如果start>end,则查找的数字一定不再此数组中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值