经典算法分析:n与lgn
顺序查找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相关推荐
- felzenszwalb算法_学习图像场景解析的理论和应用(二)场景解析的经典算法分析之SLIC...
2003 年,任晓峰教授在图像分割技术层面上提出了超像素分割的这一概念,是指具有相似纹理.颜色.亮度等特征的相邻像素构成的有一定视觉意义的不规则像素块.它利用像素之间特征的相似性将像素分组,用少量的超 ...
- 分治法的计算时间、时间复杂度推导以及经典算法分析
分治是一种解决复杂问题的思想,它可以将一个问题划分成多个小的问题,通过合并这些问题求得原问题的解.本文对分治法进行复杂性分析,并通过这种方法分析几个具体算法的时间复杂度. 文章目录 1 分治法的复杂性 ...
- Java 经典算法分析总汇
前言 在计算机软件专业中,算法分析与设计是一门非常重要的课程,很多人为它如痴如醉.很多问题的解决,程序的编写都要依赖它,在软件还是面向过程的阶段,就有'程序=算法+数据结构'这个公式.算法的学习对于培 ...
- 动画 | 大学四年结束之前必须透彻的排序算法
现如今大学生学习排序算法,除了学习它的算法原理.代码实现之外,作为一个大学生更重要的往往是要学会如何评价.分析一个排序算法.排序对于任何一个程序员来说,可能都不会陌生.大部分编程语言中,也都提供了排序 ...
- CSDN【精品专栏】 第一期
经常遇到小伙伴在社群.公众号或者文章下面发消息问:我正在学**技术,能不能给我推荐一些适合我学习的书籍.视频等:在哪可以下载到这个资源?等等此类的问题. CSDN是IT一站式服务型网站,这里可以找到到 ...
- 从m个中选n数php语言,18-从n个数中选m个
#include using namespace std; int f(int n, int m){ if(n < m) //这个条件必须先判断,因为递归时n-1了,可能有这种情 ...
- 无论生活怎样 希望你:保持自律 保持清醒
查看全文 http://www.taodudu.cc/news/show-6729380.html 相关文章: [听]自律力,关于如何提高自律能力的方法 自律和压力 [自律]学习方案 自律力 2021 ...
- java实现apriori算法_七大经典、常用排序算法的原理、Java 实现以及算法分析
0. 前言 大家好,我是多选参数的程序员,一个正再 neng 操作系统.学数据结构和算法以及 Java 的硬核菜鸡.数据结构和算法是我准备新开的坑,主要是因为自己再这块确实很弱,需要大补(残废了一般) ...
- 【算法分析与设计】经典排序算法实现
文章目录 经典排序算法目录 接口定义 直接插入排序 希尔排序 冒泡排序 快速排序☆☆☆☆☆ 简单选择排序 堆排序 二路归并排序(递归版本) 归并排序(非递归版本) 完整代码 经典排序算法目录 插入排序 ...
- Unity2017 经典游戏开发教程 算法分析与实现 (张帆 著)
https://meta.box.lenovo.com/link/view/82c451b41ce34e81a4b34cb46747d3d5 第1章 熟悉Unity软件的操作 第2章 打地鼠 (已看) ...
最新文章
- 201621123057 《Java程序设计》第12周学习总结
- 大学计算机实验教程实验报告2.2,大学计算机实验2-实验报告.pdf
- 拖动改变Table的列宽度
- 业务代码中,太多 if else 怎么办?
- 浅谈SAP CRM开发——基本业务概念
- Java面试2021,java黑马百度云
- python网络爬虫系列(八)——常见的反爬手段和解决方法
- HTC不认输!将再战智能手机市场,明年推出5G新机
- NPS内网穿透服务端一键安装脚本
- Android开机动画的基本流程
- Tbase 源码 (三)
- c语言指针数组反序存放,用指针实现逆序存放数组元素
- 逆向知识之CS1.6辅助/外挂专题.1.实现CS1.6主武器副武器无限子弹
- 40岁后吃不胖的秘诀 济阳高穗饮食理论
- 布局之space-evenly兼容性问题
- 大型团队合作的八条法则
- python检测图像中的矩形_详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
- echarts散点图使用(转:http://www.suchso.com/UIweb/echarts-sandiantu.html)
- 【WIN10】win10更改以太网名称以及以太网下网络名称
- 计算机运行速度和科学研究,()的计算机运算速度可达到一太次以上,主要用于国家高科技领域与工程计算和尖端技术研究。...