顺序查找的优化方法

我们知道折半查找的速度比顺序查找要快很多,但前提是折半查找需要有序的数组。讲解在注释里面~

package go.derek;

import java.util.Random;
public class Search {
	//这个是普通的顺序查找,for循环里面每执行一次都要判断一下i<=arr.length
	//这个是会消耗时间的
	public int seqSearch(int[] arr,int key){
		for(int i=1;i<=arr.length;i++){
			if(arr[i-1]==key){
				return i;
			}
		}
		return 0;
	}
	//这个是优化之后的,循环里面只有一个判断
	//技巧就是将数组第一个设置为查找的关键字
	//如果n最后=0了,就说明arr[0]一直到最后是没有key了。
	public int seqSearch_plus(int[] arr,int key){
		int n=arr.length-1;
		arr[0]=key;
		while(arr[n]!=key){
			n--;
		}
		return n;
	}
	//这是一个java实现的折半查询
	public int binarySearch(int[] arr,int key){
		int low=1;
		int mid=0;
		int high=arr.length;
		while(low<=high){
			mid=(low+high)/2;
			if(key<arr[mid-1]){
				high=mid-1;
			}
			else if(key>arr[mid-1]){
				low=mid+1;
			}
			else
				return mid;
		}
		return 0;
	}
	public static void main(String[] args){
		int[] arr=new int[40000000];
		for(int i=0;i<arr.length;i++){
			arr[i]=new Random().nextInt(10000000)+1;
		}
		long n=System.currentTimeMillis();
		int x=new Search().seqSearch(arr, 666615888);
		long m=System.currentTimeMillis();
		System.out.println(x);
		System.out.println("顺序查询耗时:"+(m-n)+"ms");
		long a=System.currentTimeMillis();
		int y=new Search().seqSearch_plus(arr, 666615888);
		long b=System.currentTimeMillis();
		System.out.println(y);
		System.out.println("优化之后顺序查询耗时:"+(b-a)+"ms");
		long p=System.currentTimeMillis();
	}
}

由于查询的是一个不可能出现的数,所以两个方法都是找不到的,肯定都返回0

运行结果显示:

0
顺序查询耗时:131ms
0
优化之后顺序查询耗时:114ms
由此可见,少了一个判断,速度是有所提高的~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值