`
844604778
  • 浏览: 553986 次
文章分类
社区版块
存档分类
最新评论

顺序查找的优化方法

 
阅读更多

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

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


分享到:
评论

相关推荐

    MySQL的慢查询与常见的查找方法(顺序查找,二分查找)

    常见的查找方法 一. 寻找慢查询 定义:我们将超过指定时间的SQL语句查询称为“慢查询”。 1、在mysql日志中开启慢查询日志 修改配置文件 在 my.ini 增加几行: 主要是慢查询的定义时间(超过2秒就是慢查询),以及慢...

    SQLServer2008查询性能优化 2/2

    《SQL Server 2008查询性能优化》通过大量实例,详细介绍了SQL Server数据库系统优化的各种方法和技巧。内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计...

    Oracle优化53解

    通常索引提供了快速访问ROWID的方法,因此那些基于索引列的查询就可以得到性能上的提高。 3.共享SQL语句 为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中。这块位于系统全局区域...

    SQL性能优化

     有索引就会采用索引查找  但有的情况下可以对它进行优化  如一个表有100万记录,一个数值型字段A,30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A&gt;2与A&gt;=3的效果就有很大的区别了,...

    ORACLE SQL性能优化系列

    当你向ORACLE 提交一个SQL语句,ORACLE会首先在这块内存中查找相同的语句. 这里需要注明的是,ORACLE对两者采取的是一种严格匹配,要达成共享,SQL语句必须 完全相同(包括空格,换行等). 共享的语句必须满足三个...

    人口信息系统方案设计 数据结构课程设计(含源程序)

    查找每个人的信息,有多种方案可实现查找,一种方案是先把数据从文本中取出来放到链表中,输入所要查找人的姓名,就按照顺序查找的方法逐一地查找。另一种方案是把文本里的数据保存为索引表,按地名相同放在一起,...

    SQLServer2008查询性能优化 1/2

    《SQL Server 2008查询性能优化》通过大量实例,详细介绍了SQL Server数据库系统优化的各种方法和技巧。内容涵盖了数据库应用系统中各种性能瓶颈的表现形式及其发生的根源和解决方法,从硬件瓶颈到查询、索引设计...

    重复文件查找王(文件工具)

    在查找的文件总数及内容完全相同的情况下,这7种算法,按照从小到大的顺序,查找速度递减(即占用的时间递增),但是查找的准确度递增。默认的查找方式是第4层。设置方法:“高级设置” --&gt; “搜索方式”。 本软件的...

    SQL查询安全性及性能优化

    扫描:可以理解为对数据进行顺序访问,并未使用索引进行查找 查找:可以理解为用索引进行查找 因此查找效率高于索引扫描效率 执行计划的意义 对于我们开发高质量SQL是很有帮助的 首先可以帮助我们查看SQL语句...

    Asp.Net网站优化系列之数据库的优化措施与索引优化方法

    索引的作用就类似于书的目录,书的目录会按照章节的顺序排列,会指想某一张的位置。这样如果在一本数百页的书里面查找某个章节位置的时候,我们就可以只扫描书的目录,扫描的范围缩小了n倍,查询的效率自然就提高了...

    很好用的重复文件搜索查找工具

    在查找的文件总数及内容完全相同的情况下,这7种算法,按照从小到大的顺序,查找速度递减(即占用的时间递增),但是查找的准确度递增。默认的查找方式是第4层。设置方法:“高级设置” --&gt; “搜索方式”。 本...

    C#,动态规划(DP)丢鸡蛋问题(Egg Dropping Puzzle)的三种算法与源代码

    仅有一个鸡蛋供试验时,只能采用顺序查找法。有足够多的鸡蛋时,可以采用二分查找法。有多于一个但数量有限的鸡蛋时,采用动态规划方法求解。双蛋问题 (two-egg problem) 是本问题的一个特例,曾出现于谷歌的程序员...

    静态查找算法性能分析 (2014年)

    查找是信息处理中常用的操作.对顺序查找和折半查找两种静态查找算法的性能进行了分析,并给出了相应算法平均查找长度的计算方法,以便应用软件设计者选择合适的查找算法,优化系统性能.

    Delphi算法与数据结构 源码(上)

    4.2顺序查找 4.3二分查找 4.4小结 第5章排序 5.1排序算法 5.2排序基础知识 5.3小结 第6章随机算法 6.1随机数生成 6.2其他随机数分布 6.3跳表 6.4小结 第7章散列和散列表 7.1散列函数 7.2利用线性探测方法...

    Delphi算法与数据结构 源码(下)

    4.2顺序查找 4.3二分查找 4.4小结 第5章排序 5.1排序算法 5.2排序基础知识 5.3小结 第6章随机算法 6.1随机数生成 6.2其他随机数分布 6.3跳表 6.4小结 第7章散列和散列表 7.1散列函数 7.2利用线性探测方法...

    具有自治表面的深度约束测深映射的自适应路径规划

    描述了对 GP 进行顺序更新的方法,允许在小型嵌入式 PC 上进行在线拟合、预测和超参数优化。 为划分凸多边形引入了新算法,以实现有效的覆盖路径规划。 这些算法在模拟和现场使用为该任务建造的小型双体差推力船...

    MySQL高级知识-查询与索引优化分析

    手写手写SQL顺序机读顺序总结-SQL解析顺序SQL解析SQLJOINs七种JOIN图解实验:练习1、A、B两表共有2、A、B两表共有+A的独有3、A、B两表共有+B的独有4、A的独有5、B的独有6、AB全有MySQLFullJoin的实现因为MySQL不支持...

Global site tag (gtag.js) - Google Analytics