顺序查找O(n)

二分查找O(lgn)

通过代码来感受性能差别

 1 package recursion;
 2
 3 /**
 4  * @author zsh
 5  * @company wlgzs
 6  * @create 2019-02-16 16:09
 7  * @Describe 感受顺序查找与二分查找的性能差别
 8  */
 9 public class Main2 {
10
11     /**
12      * 顺序查找
13      * @param arr 待查找的数组
14      * @param key 待查找的数
15      * @return 返回key在数组中所在的位置
16      */
17     static int sequentialSearch(int[] arr,int key){
18         for (int i = 0; i < arr.length; i++) {
19             if (arr[i] == key){
20                 return i;
21             }
22         }
23         return -1;
24     }
25
26     /**
27      * 循环实现二分查找
28      * @param arr 待查找的数组
29      * @param key 待查找的数
30      * @return key在数组中的索引位置
31      */
32     static int binary(int[] arr,int key){
33         //头指针初始位置
34         int low = 0;
35         //尾指针初始位置
36         int high = arr.length -1;
37         //定义middle指针位置
38         int middle = 0;
39         //头尾交叉 || key大于最大值 || key小于最小值,说明未找到
40         if (low > high || key > arr[high] || key < arr[low]){
41             return -1;
42         }
43
44         while (low <= high){
45             //防止数据溢出
46             middle = (low + high) >>> 1;
47             if (arr[middle] > key){
48                 //middle所对应的值比key大,key应该在左边区域
49                 high = middle -1;
50             }else if (arr[middle] < key){
51                 //middle所对应的值比key小,key应该在有边区域
52                 low = middle +1;
53             }else {
54                 return middle;
55             }
56
57         }
58
59         //最后仍然没有找到,则返回-1
60         return -1;
61     }
62
63     public static void main(String[] args) {
64         //构造1千万的数据
65         int[] arr = new int[(int) Math.pow(10,8)];
66         for (int i = 1; i <= (int) Math.pow(10,8) ; i++) {
67             arr[i-1] = i;
68         }
69
70         //使用顺序查找的运行时间
71         long time1 = System.currentTimeMillis();
72         sequentialSearch(arr,1000000);
73         long time2 = System.currentTimeMillis();
74         System.out.println(time2-time1);
75
76         //使用二分查找的运行时间
77         long time3 = System.currentTimeMillis();
78         binary(arr,1000000);
79         long time4 = System.currentTimeMillis();
80         System.out.println(time4-time3);
81     }
82
83 }

运行结果:

转载于:https://www.cnblogs.com/zsh-blogs/p/10388177.html

经典算法分析:n与lgn相关推荐

  1. felzenszwalb算法_学习图像场景解析的理论和应用(二)场景解析的经典算法分析之SLIC...

    2003 年,任晓峰教授在图像分割技术层面上提出了超像素分割的这一概念,是指具有相似纹理.颜色.亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块.它利用像素之间特征的相似性将像素分组,用少量的超 ...

  2. 分治法的计算时间、时间复杂度推导以及经典算法分析

    分治是一种解决复杂问题的思想,它可以将一个问题划分成多个小的问题,通过合并这些问题求得原问题的解.本文对分治法进行复杂性分析,并通过这种方法分析几个具体算法的时间复杂度. 文章目录 1 分治法的复杂性 ...

  3. Java 经典算法分析总汇

    前言 在计算机软件专业中,算法分析与设计是一门非常重要的课程,很多人为它如痴如醉.很多问题的解决,程序的编写都要依赖它,在软件还是面向过程的阶段,就有'程序=算法+数据结构'这个公式.算法的学习对于培 ...

  4. 动画 | 大学四年结束之前必须透彻的排序算法

    现如今大学生学习排序算法,除了学习它的算法原理.代码实现之外,作为一个大学生更重要的往往是要学会如何评价.分析一个排序算法.排序对于任何一个程序员来说,可能都不会陌生.大部分编程语言中,也都提供了排序 ...

  5. CSDN【精品专栏】 第一期

    经常遇到小伙伴在社群.公众号或者文章下面发消息问:我正在学**技术,能不能给我推荐一些适合我学习的书籍.视频等:在哪可以下载到这个资源?等等此类的问题. CSDN是IT一站式服务型网站,这里可以找到到 ...

  6. 从m个中选n数php语言,18-从n个数中选m个

    #include using namespace std; int f(int n, int m){ if(n < m)         //这个条件必须先判断,因为递归时n-1了,可能有这种情 ...

  7. 无论生活怎样 希望你:保持自律 保持清醒

    查看全文 http://www.taodudu.cc/news/show-6729380.html 相关文章: [听]自律力,关于如何提高自律能力的方法 自律和压力 [自律]学习方案 自律力 2021 ...

  8. java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析

    0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...

  9. 【算法分析与设计】经典排序算法实现

    文章目录 经典排序算法目录 接口定义 直接插入排序 希尔排序 冒泡排序 快速排序☆☆☆☆☆ 简单选择排序 堆排序 二路归并排序(递归版本) 归并排序(非递归版本) 完整代码 经典排序算法目录 插入排序 ...

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

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

最新文章

  1. 201621123057 《Java程序设计》第12周学习总结
  2. 大学计算机实验教程实验报告2.2,大学计算机实验2-实验报告.pdf
  3. 拖动改变Table的列宽度
  4. 业务代码中,太多 if else 怎么办?
  5. 浅谈SAP CRM开发——基本业务概念
  6. Java面试2021,java黑马百度云
  7. python网络爬虫系列(八)——常见的反爬手段和解决方法
  8. HTC不认输!将再战智能手机市场,明年推出5G新机
  9. NPS内网穿透服务端一键安装脚本
  10. Android开机动画的基本流程
  11. Tbase 源码 (三)
  12. c语言指针数组反序存放,用指针实现逆序存放数组元素
  13. 逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹
  14. 40岁后吃不胖的秘诀 济阳高穗饮食理论
  15. 布局之space-evenly兼容性问题
  16. 大型团队合作的八条法则
  17. python检测图像中的矩形_详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
  18. echarts散点图使用(转:http://www.suchso.com/UIweb/echarts-sandiantu.html)
  19. 【WIN10】win10更改以太网名称以及以太网下网络名称
  20. 计算机运行速度和科学研究,()的计算机运算速度可达到一太次以上,主要用于国家高科技领域与工程计算和尖端技术研究。...

热门文章

  1. 计算机应用基础 福师在线作业一,福师《计算机应用基础》在线作业一
  2. 金融分析与风险管理——投资组合的绩效评估
  3. Sentinel-2数据下载方法
  4. 国家航天局:中国将论证建立月球科研基地
  5. 电路 常见的数据线接口
  6. python求小于n的最大素数_找出小于n的最大素数,其中n =〜10 ^ 230 - python
  7. Hadoop 3.x 的组成 完整使用 (月薪过万 第三章)
  8. 消失的遗传力--wiki
  9. EAS服务不可用或者更新一半中断解决方案
  10. 室内GPS定位初露峥嵘