`
yinyi_sys
  • 浏览: 2141 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java二分查询与普通查询性能对比

    博客分类:
  • JAVA
阅读更多


   public static void main(String[] args) {
		int[] nums = new int[10000000];
		for (int i = 0; i < 10000000; i++) {
			nums[i] = i;
		}
		commonSearch(nums, 10000000 - 1); //普通查询
		binarySearch(nums, 10000000 - 1); //二分查询

	}

// 普通查询
	public static void commonSearch(int nums[], int snum) {
		long timsf = System.nanoTime();
		for (int i = 0, len = nums.length; i < len; i++) {
			if (nums[i] == snum) {
				System.out.println("普通循环总共循环:" + (i + 1) + "次");
				break;
			}
		}
		long timse = System.nanoTime();
		System.out.println("普通循环总共耗时:" + (timse - timsf) + "ns");
	}

// 二分查询
	public static void binarySearch(int nums[], int snum) {
		int index = 0;
		int low = 0;
		int hig = nums.length - 1;
		long timsf = System.nanoTime();
		for (int i = 0, len = nums.length; i < len; i++) {
			index = (low + hig) / 2;
			if (nums[index] == snum) {
				System.out.println("二分查询总共循环:" + (i + 1) + "次");
				break;
			} else if (nums[index] < snum) {
				low = index + 1;
			} else {
				hig = index - 1;
			}
		}
		long timse = System.nanoTime();
		System.out.println("二分查询总共耗时:" + (timse - timsf) + "ns");
	}

执行结果:
普通循环总共循环:10000000次
普通循环总共耗时:22860745ns
二分查询总共循环:24次
二分查询总共耗时:65987ns


long timse = System.nanoTime();

"这里为了体现性能结果采用纳秒来计算。"
15
27
分享到:
评论
3 楼 trnnn 2012-07-31  
个人拙见:这个 System.out.println 这样的输出语句 还是不要写在性能测试的主题代码里头比较好,因为这个out相当耗时间。第二,因为JVM对执行性能的优化 同一个方法第一次执行 和第二次执行的时间有很大差别,最好把同一个代码段预先执行三到五次,才能达到最佳性能
2 楼 wuxing429 2012-07-30  
二分查找  排序好的时间当然少   你这个其实是循环了m/n 而普通查找是n
1 楼 love_ysys 2012-07-30  
要是查询的数字就是第一个或者比较靠前呢?。。。所谓的这些查找方法各有优缺点,不限定哪个一定就更好。。。

相关推荐

    从二分排序看到的知识

    二分查找的基本思想是将数组分为两半,根据中间元素与目标值的比较结果,不断缩小搜索范围,直到找到目标值或确定其不存在为止。这种算法的时间复杂度为O(log n),在大型数据集上效率较高。将二分查找应用到插入排序...

    java全集.pdf JAVA全集

    - **高性能**:虽然Java最初被认为是解释型语言,但随着JIT(Just-In-Time)编译器的发展,Java的性能得到了显著提升。 **1.2 运行原理** Java程序的执行过程大致分为以下几个步骤: 1. 编写源代码并保存为`.java`...

    经典JAVA基础.txt

    二分查找是一种在有序数组中查找特定元素的高效算法。如果数组中的元素比目标值大,则在数组的左半部分继续搜索;反之,则在右半部分搜索。示例代码如下: ```java public int binarySearch(int[] dataset, int data...

    Java 基础核心总结 +经典算法大全.rar

    与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 ...

    java经典面试题

    29. **`foreach` 与普通 `for` 循环效率对比**: - `foreach` 更简洁,但在某些特定情况下可能不如普通 `for` 循环高效。 30. **Java I/O 与 NIO**: - Java I/O(Java IO):传统的字节流和字符流。 - Java NIO...

    JAVA程序员面试问题

    Java与C++的比较 Java和C++都是流行的编程语言,但它们在设计理念、语法和性能上有很大的不同。Java强调“一次编写,到处运行”的跨平台性,具有自动内存管理和异常处理机制,适合开发企业级应用和移动应用。C++则...

    java面试宝典

    #### 第二章 Java基础 21. **“==”与“equals”区别**:“==”比较的是两个对象的引用,而equals()比较的是两个对象的内容。 22. **接口和抽象类的区别**:接口只能包含抽象方法和常量,抽象类可以包含普通方法和...

    java面试题集

    2. ArrayList与LinkedList:对比它们的性能特点,选择合适的数据结构。 3. HashMap与HashSet:分析它们的工作原理,掌握线程不安全问题及解决方案。 4. 泛型:了解泛型的使用,理解类型擦除的概念。 六、多线程 1. ...

    基于java的资源共享平台分析与设计

    《基于Java的资源共享平台分析与设计》 在信息化飞速发展的今天,资源共享成为了提升效率、促进创新的关键。本文将深入探讨基于Java的资源共享平台的设计与实现,旨在利用Java的高效性和可扩展性,构建一个安全、...

    2019年最新版修订版Java程序员面试宝典.pdf

    4. **并发集合与普通集合的区别**:并发集合(如`ConcurrentHashMap`)支持多线程安全地进行并发读写操作。 5. **`List`的子类特点**: - `ArrayList`:基于数组实现,随机访问快,插入删除慢。 - `LinkedList`:...

    各种排序算法java实现

    二分法插入排序是对普通插入排序的一种改进,通过二分查找确定插入位置,减少了比较次数。在Java中,先将数组的第一个元素视为有序部分,然后对每个未排序元素,用二分查找找到合适位置插入。二分法插入排序在最好...

    Java岗面试核心MCA版

    #### 二、Java语言特点与基础语法 - **Java语言特点**: - 面向对象:支持封装、继承、多态等面向对象特性。 - 平台无关性:通过字节码和JVM实现了跨平台能力。 - 安全性:提供了内存管理和异常处理机制。 - ...

    2024高级中级-java面试题.docx

    Java 面试题库 Java 是一种广泛使用的编程语言,它具有面向对象的设计原则、平台独立性、多线程支持等特点。本文档总结了 Java 面试题库,涵盖了 Java 语言的基础特性、面向对象设计原则、多线程、集合框架、反射、...

    2019计算机二级测试Java试卷.docx

    构造方法与普通成员方法的主要区别在于: - **构造方法的名称必须与类名相同**。 - **构造方法没有返回值类型**,即使是void也不行。 - **构造方法主要用于初始化对象的状态**,而普通成员方法则是实现类的行为...

    Java安全与质量编码规范.docx

    - **比较与赋值:** - **不要误用=和==:** 确保使用正确的运算符进行比较或赋值。 - **字符串比较应使用equals:** 使用String类的equals方法进行字符串比较。 - **浮点型数据不要直接进行相等性比较:** 浮点数...

    java面试,常考知识点汇总

    #### 二、Java容器详解 1. **Java容器分类**: - **Collection**:包括`List`、`Set`和`Queue`。 - **Map**:键值对结构,如`HashMap`、`TreeMap`等。 2. **Collection子类**: - **List**: - **ArrayList**...

    java 内排序实现

    6. **折半插入排序(Binary Insertion Sort)**:在插入排序基础上,使用二分查找定位插入位置,减少比较次数,提高了效率,但时间复杂度仍然为O(n^2)。 7. **希尔排序(Shell Sort)**:改进版的插入排序,通过...

    Java开源的下一代社区平台Symphony.zip

    普通帖子:提问或分享对别人有帮助的经验与见解 思绪:写作过程的记录与重放,文字版的沙画表演 (?) 小黑屋:邀请好友在私密空间中进行交流 同城广播:发起你所在城市的招聘、Meetup 等 另外,所有帖子都可以...

    java代码优化细节总结1.0版本.7z

    - 尽量减少嵌套循环,提升算法时间复杂度,例如,使用二分查找代替线性搜索。 - 避免在循环体内进行不必要的计算,可以提前计算或存储结果。 4. **异常处理**: - 精确捕获异常,避免使用`catch (Exception e)`...

Global site tag (gtag.js) - Google Analytics