【数组】之查找详解

在java中常用的查找方法有两种:顺序查找二分法查找(又叫折半查找)。

一、顺序查找

基本思想:顺序查找算法,从数组中的第0个位置到数组结束逐个的与给定的目标进行匹配,如果匹配到即返回位置,查找数组中所有的值都没有匹配上说明没找到即返回-1。

public static int sequenceSearch(int[] arr, int key) {
			for (int i = 0; i < arr.length; i++) {
				//从数组的开始到最后,依次的比较要查找的数值,如果相等,则找到
				if (arr[i] == key) {
					return i;
				}
			}
			//没找到则返回负值 -1
			return -1;
		}

		public static void main(String[] args) {
			int arr[] = { 49, 38, 65, 97, 76, 13, 27, 26 };
			//要查找的值
			int key = 76;
			//返回int类型的 数组下标值
			int index = sequenceSearch(arr, key);

			if (index == -1) {
				System.out.println("在该数组中没有找到" + key);
			} else {
				System.out.println("在该数组中找到了"+ key + ",下标为" + index);
			}
		}

运行结果:

二、二分法查找

使用二分法查找的前提是数组是有序的,如果是无序的还想用二分法进行查找的话就需要先进行排序再查找。

基本思想:将n个元素分成大致相等的两部分,取a[n/2]与searchVal做比较,如果x=a[n/2],则找到searchVal,算法中止;如果searchVal<a[n/2],则只要在数组a的左半部分继续搜索searchVal,如果searchVal>a[n/2],则只要在数组a的右半部搜索searchVal。 

public static int binarySearch(int[] arr, int Searchval) {
		//定义一个最低位
		int low=0;
		//定义一个最高位
		int high=arr.length-1;
		
		//如果低位和高位没有重合,说明查找没有结束
		while(low<=high) {
			//计算中间位置,低位+高位 除于2
			int mid=(low+high)/2;
			
			//中间的数字和目标数字进行比较
			if(Searchval==arr[mid]) {//如果相等,则找到返回mid
				return mid;
				
			}else if(Searchval<arr[mid]) {				
				//如果value值比中间值小,则说明中间值右侧(比mid大的值)的就不用比较了,
				//那么右侧的最高位就是high=mid-1
				high=mid-1;
				
			}else if(Searchval>arr[mid]) {
				//如果value值比中间值大,则说明中间值的左侧(比mid小的值)的就不用比较了,
				//那么左侧的最低位就是low=mid+1
				low=mid+1;
			}
		}
		//没有找到就返回负值 -1
		return -1;
	}
	
	public static void main(String[] args) {
		//二分查找条件  必须是排好序的
		int arr[] = {13, 26, 27, 38, 49, 65, 76, 97};
		
		int Searchval = 76;
		//返回数组的下标
		int index=binarySearch(arr,Searchval);
		
		if (index == -1) {
			System.out.println("在该数组中没有找到" + Searchval);
		} else {
			System.out.println("在该数组中找到了"+ Searchval + ",下标为" + index);
		}	
	}	

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值