顺序查找的优化方法
来源:互联网 发布:手机淘宝怎么联系售后 编辑:程序博客网 时间:2024/05/17 08:11
我们知道折半查找的速度比顺序查找要快很多,但前提是折半查找需要有序的数组。讲解在注释里面~
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;}elsereturn 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
由此可见,少了一个判断,速度是有所提高的~
- 顺序查找的优化方法
- 查找算法-顺序查找(顺序表的普通实现和优化实现)
- 顺序方法查找
- 顺序查找及简单优化
- 顺序表查找优化(哨兵元素的重要作用)
- 顺序表查找优化(哨兵元素的重要作用)
- 顺序表查找算法的实现与优化
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- 静态查找的方法:顺序查找、对半查找、分块查找,C++代码实现
- 【数据结构作业六a】建立一个顺序表,用顺序查找、折半查找的方法对其实施查找
- 【查找--静态查找】简单的顺序查找
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- 顺序查找的改进
- 顺序表的查找
- 顺序表的查找
- 顺序表的查找
- YUV420数据存储
- 《程序员,你伤不起》–读书笔记-序
- 高精度算法集锦
- Java第2课 eclipse的使用
- Linux内核数据结构
- 顺序查找的优化方法
- 学习笔记-排列组合问题
- 跨平台日志清理工具 Log-Cutter v2.0.1 RC-1 发布
- 稀疏矩阵的正交链表解析
- bfs--poj3669
- POJ 3368 RMQ-ST
- c++IO对象不可复制
- 阿里题目:仓库运输问题(糖果传递)
- 使用 Boost 的Locale 進行字碼轉換