从零单刷数据结构(Java描述)(四)——查找

本文深入讲解了两种查找算法:顺序查找和折半查找(二分查找)。顺序查找适用于任何线性表,通过遍历查找目标元素;折半查找则针对有序表,利用二分策略高效定位目标,大幅提高查找效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录)。

(一)顺序表查找:从表的第一个记录开始依次往后,直到最后一个记录,查找到的话返回,否则返回-1。

	// 线性查找,找到返回下标的索引值,否则返回-1
	public static int arrSearch(int[] arr, int target) {
		int index = -1;
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == target) {
				index = i;
				break;
			}
		}
		return index;
	}
//测试代码
public static void main(String[] args) {
		int[] arr = new int[] { 5, 6, 7, 34, 5, 1, 0, 4, 3, 2, 9, 8 };
		int res = arrSearch(arr, 1);
		//返回5
		System.out.println(res);
	}

(二)有序表查找:
折半查找(二分查找):线性表中的记录有序,且采用顺序存储。基本思想是取中间值为比较对象,如果中间值等于被查找值,则返回;如果中间值大于被查找值,则在前半序列继续二分查找;如果中间值小于被查找值,则在后半序列继续二分查找。

public static int biSearch(int[]arr,int target) {
		int begin=0;
		int end=arr.length-1;
		int mid=(begin+end)/2;
		int index=-1;
		while(true) {
		//如果没找到返回-1
			if(begin>=end)return -1;
			//中间值等于被查找值
			if(arr[mid]==target) {
				index=mid;
				break;
			}
			else {
                //中间值大于被查找值
				if(arr[mid]>target)end=mid-1;
				//中间值小于被查找值
				else begin=mid+1;
			}
			mid=(begin+end)/2;
		}
		return index;
	}
//测试代码
public static void main(String[] args) {
		int[]arr=new int[] {1,2,3,4,5,6,7,8,9};
		int res=biSearch(arr, 4);
		//返回3
		System.out.println(res);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值