设为首页 加入收藏

TOP

顺序查找的优化方法
2014-11-24 02:38:46 来源: 作者: 【 】 浏览:1
Tags:顺序 查找 优化 方法

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


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 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[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
由此可见,少了一个判断,速度是有所提高的~


推荐阅读:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇冒泡排序优化版,性能近乎翻倍 下一篇Java访问权限

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: