Java算法-数组线性查找与二分法查找

在数组的查找中,最为简单的查找算法为线性查找。
线性查找实际上就是按顺序遍历数组中的每一个元素,直到查找到目标位置。

public class ArrayTest {
	public static void main(String[] args) {
		String[] array = new String[] {"alex","bob","candy","david","edward","fox"};
		String dest = "edward";//要查找的对象
		boolean isFlag = false;//标识
		for(int i = 0;i < array.length;i++) {//按索引从小到大遍历
			if(array[i] == dest) {
				isFlag = true;
				System.out.println("finded " + dest + " in position: " + i);
			}	
		}
		if(isFlag == false) {
			System.out.println("can't match");
		}
	}
}

线性查找简单粗暴,但效率太低。二分法查找在效率上较线性查找有所提高。

二分法查找不再按照顺序对数组进行遍历,而是将一个数组等分为左右两部分,直接取数组中处于中间位置的元素要查找的元素比较大小。若中间位置的元素较小,则将查找的范围设置为右边。反之,则将查找的范围设置为左边。

既然二分法需要比较大小,那么意味着二分法只适用于元素是按照大小顺序排列的数组

public class ArrayTest {
	public static void main(String[] args) {
//		String[] array = new String[] {"alex","bob","candy","david","edward","fox"};
//		String dest = "edward";
//		boolean isFlag = false;
//		for(int i = 0;i < array.length;i++) {
//			if(array[i] == dest) {
//				isFlag = true;
//				System.out.println("finded " + dest + " in position: " + i);
//			}	
//		}
//		if(isFlag == false) {
//			System.out.println("can't match");
//		}
		
		
		int[] array1 = new int[] {-98,-66,-33,0,3,9,23,34,58};
		int dest1 = 3;
		int head = 0;//查找起始位置
		int end = array1.length - 1;//查找结束位置
		boolean isFlag1 = false;
		while(head <= end) {
			int middle = (head + end)/2;
			if(dest1 == array1[middle]) {
				isFlag1 = true;
				System.out.println("finded " + dest1 + " in position: " + middle);
				break;
			}else if(dest1 < array1[middle]) {
				end = middle - 1;//向左缩小查找范围
			}else {
				head = middle + 1;//向右缩小查找范围
			}
		}
		if(isFlag1 == false) {
			System.out.println("can't match");
		}
	}
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值