顺序查找O(n)

二分查找O(lgn)

通过代码来感受性能差别

 package recursion;

 /**
* @author zsh
* @company wlgzs
* @create 2019-02-16 16:09
* @Describe 感受顺序查找与二分查找的性能差别
*/
public class Main2 { /**
* 顺序查找
* @param arr 待查找的数组
* @param key 待查找的数
* @return 返回key在数组中所在的位置
*/
static int sequentialSearch(int[] arr,int key){
for (int i = 0; i < arr.length; i++) {
if (arr[i] == key){
return i;
}
}
return -1;
} /**
* 循环实现二分查找
* @param arr 待查找的数组
* @param key 待查找的数
* @return key在数组中的索引位置
*/
static int binary(int[] arr,int key){
//头指针初始位置
int low = 0;
//尾指针初始位置
int high = arr.length -1;
//定义middle指针位置
int middle = 0;
//头尾交叉 || key大于最大值 || key小于最小值,说明未找到
if (low > high || key > arr[high] || key < arr[low]){
return -1;
} while (low <= high){
//防止数据溢出
middle = (low + high) >>> 1;
if (arr[middle] > key){
//middle所对应的值比key大,key应该在左边区域
high = middle -1;
}else if (arr[middle] < key){
//middle所对应的值比key小,key应该在有边区域
low = middle +1;
}else {
return middle;
} } //最后仍然没有找到,则返回-1
return -1;
} public static void main(String[] args) {
//构造1千万的数据
int[] arr = new int[(int) Math.pow(10,8)];
for (int i = 1; i <= (int) Math.pow(10,8) ; i++) {
arr[i-1] = i;
} //使用顺序查找的运行时间
long time1 = System.currentTimeMillis();
sequentialSearch(arr,1000000);
long time2 = System.currentTimeMillis();
System.out.println(time2-time1); //使用二分查找的运行时间
long time3 = System.currentTimeMillis();
binary(arr,1000000);
long time4 = System.currentTimeMillis();
System.out.println(time4-time3);
} }

运行结果:

经典算法分析:n与lgn的更多相关文章

  1. 经典算法分析:n^2与nlgn

    冒泡.插入.选择排序的时间复杂度为O(n2) Arrays.sort()时间复杂度为nlgn 具体算法实现代码: package recursion; import java.util.Arrays; ...

  2. Unity2017 经典游戏开发教程 算法分析与实现 (张帆 著)

    https://meta.box.lenovo.com/link/view/82c451b41ce34e81a4b34cb46747d3d5 第1章 熟悉Unity软件的操作 第2章 打地鼠 (已看) ...

  3. 《算法4》读书笔记 1.4 - 算法分析(Analysis of Algorithm)

    --------------------------- First priority is to make you code ** CLEAR and CORRECT, but PERFORMANCE ...

  4. 十大经典排序算法总结(JavaScript描述)

    前言 读者自行尝试可以想看源码戳这,博主在github建了个库,读者可以Clone下来本地尝试.此博文配合源码体验更棒哦~~~ 个人博客:Damonare的个人博客 原文地址:十大经典算法总结 这世界 ...

  5. Python数据结构与算法--算法分析

    在计算机科学中,算法分析(Analysis of algorithm)是分析执行一个给定算法需要消耗的计算资源数量(例如计算时间,存储器使用等)的过程.算法的效率或复杂度在理论上表示为一个函数.其定义 ...

  6. 阶乘之和 & 程序运行时间 & 算法分析

    实例:输入n,计算S = 1! + 2! + 3! + 4! + ... + n!的末六位(不含前导0).其中 n ≤ 106. 分析:考虑到数据溢出后程序如下: #include <stdio ...

  7. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

  8. hdu 1043 Eight 经典八数码问题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1043 The 15-puzzle has been around for over 100 years ...

  9. 【转】c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...

随机推荐

  1. LeetCode13.罗马数字转整数

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并 ...

  2. javaweb防止表单重新提交

    一.前台验证 1.首先在from表单加一个隐藏域字段,设值为true.例如: <input type="hideen" name="tokenFlag" ...

  3. Android Studio -- 关联源码

    1,昨天刚把SDK升级到25,然后准备开始 新的一年码代码,结果发现查看源码的时候出现了一堆的“ throw new RuntimeException("Stub!");” 网上搜 ...

  4. CSS position &居中(水平,垂直)

    css position是个很重要的知识点: 知乎Header部分: 知乎Header-inner部分: position属性值: fixed:生成绝对定位的元素,相对浏览器窗口进行定位(位置可通过: ...

  5. 转:安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法

    ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor':/home/king/PHP-5.2.13/ext/iconv/ ...

  6. html5-新增表单的小结details summary

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  7. RSA解密解密

    #!/usr/bin/env python # -*- coding:utf-8 -*- import rsa import base64 # ######### 1. 生成公钥私钥 ######## ...

  8. Spring boot 入门配置

    1,maven 的pom 文件里面引入 <!-- spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加. ...

  9. webservice 生成客户端代码

    使用 jdk 自带工具 wsimport wsimport -keep http://webservice/url?wsdl

  10. Linux基础命令---chsh

    chsh 改变用户登录时使用的shell,默认使用bash.如果命令行上没有给出shell,chsh将提示输入一个shell.chsh将接受系统上任何可执行文件的完整路径名.但是,如果shell未在“ ...