Day_07 数组

2.1    查找元素

需求:给定一个数组,判断是否包含某个面,如果包含返回对应的下标,如果不包含返回-1

顺序查找:   优点:编码简单,容易理解,没啥逻辑,就挨个比较    数据靠前的话,效率也比较高

                      缺点:随机查询效率较低

二分法查找:1.建立在排序的基础上

2 .用于查找固定有序的数据

实现原理:    每次和中间比较

1 确定起始下标和结束下标

2 确定中间下标,然后和目标数据开始比较

3 如果相等.就返回中间下标即可
4 如果目标数据大于中间数据 , 结束值不变,起始值=中间值+1, 重新生成中间值,继续比较
5 如果目标数据小于中间数据,起始值不变,结束值=中间值-1.重新生成中间值,继续比较
6 当起始值大于结束值的时候,说明不存在

public class BinarySearch {

	public static void main(String[] args) {
		int[] arr = { 1, 2, 3, 4, 6, 8, 13, 22, 14, 16, 26, 84, 35, 27, 9, 345,
				133 };
		// 排序
		Arrays.sort(arr);
		arr = new int[9999999];
		for (int i = 0; i < arr.length; i++) {
			arr[i] = i+1;
		}
		int target = 1;
		int result = search(arr, target);
		System.out.println(result);
		result = binarySearch(arr, target);
		System.out.println(result);
	}

	public static int binarySearch(int[] arr, int target) {
		int count = 0;
		// * 1 确定起始下标和结束下标
		int startPos = 0;
		int endPos = arr.length - 1;
		// * 2 确定中间下标,然后和目标数据开始比较
		int m = (startPos + endPos) / 2;
		// 循环比较
		while (startPos <= endPos) {
			count++;
			// * 3 如果相等.就返回中间下标即可
			if (target == arr[m]) {
				System.out.println("二分查找 : "+count);
				return m;
			}
			// * 4 如果目标数据大于中间数据 , 结束值不变,起始值=中间值+1, 重新生成中间值,继续比较
			if (target > arr[m]) {
				startPos = m+1;
			}
			// * 5 如果目标数据小于中间数据,起始值不变,结束值=中间值-1.重新生成中间值,继续比较
			if (target < arr[m]) {
				endPos = m-1;
			}
			m = (startPos + endPos) / 2;
		}
		// * 6 当起始值大于结束值的时候,说明不存在
		System.out.println("二分查找 : "+count);
		return -1;
	}
	
	// 传统查找方式
	public static int search(int[] arr , int num){
		int count = 0;
		for (int i = 0; i < arr.length; i++) {
			count++;
			if (arr[i] == num) {
				System.out.println("顺序查找 : "+count);
				return i;
			}
		}
		System.out.println("顺序查找 : "+count);
		return -1;
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值