java 二分查找计算时间复杂度

二分循环遍历数组时,

假设该数组的长度是N那么二分后是N/2,再二分后是N/4……直到二分到1结束(最坏情况),

那么我们设置次数为Y,则表达式:

  N*(1/2)^Y=1;

经过推算:

  既得 Y = Log2N.

曾经和我一样脑残的同学,计算过程可以咨询下其他同学呦..

原文地址:https://www.cnblogs.com/shuaishuai1993/p/8257063.html

时间: 2024-11-03 18:29:55

java 二分查找计算时间复杂度的相关文章

Java二分查找算法

二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分.通过一次比较,将查找区间缩小一半. 折半查找是一种高效的查找方法.它可以明显减少比较次数,提高查找效率.但是,折半查找的先决条件是查找表中的数据元素必须有序. 折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除

JDK自带的二分查找算法和自己写的普通二分查找算法的比较(java二分查找源代码)

一.描述 解析和比较JDK自带的二分查找算法和自己写的普通二分查找算法,使用二进制位无符号右移来代替除2运算,并使用产生随机数的方法产生一定范围的随机数数组,调用Arrays类的sort()静态方法,对int类型数组进行排序. Math.random()的用法:会产生一个[0,1)之间的随机数(注意能取到0,不能取到1),这个随机数的是double类型,要想返回指定范围的随机数如[m,n]之间的整数的公式:(int)(Math.random()*(m-n+1)+m) 二.源代码 <span st

java二分查找举例讨论

最近做笔试题有这么一个关于二分查找的例子,有些疑惑. 给一个有序数组,和一个查找目标,用二分查找找出目标所在index,如果不存在,则返回-1-(其应该出现的位置),比如在0,6,9,15,18中找15,返回3:找10.则返回-4(-1-3) 实现如下: public class Sulution1 { public static void main(String[] args) { System.out.println(findBySep(2, new int[]{0,2,4,6,9}));

java 二分查找 - 折半查找算法

二分查找: 这个算法是比较简单的,容易理解的.这个算法是对有序的数组进行查找,所以想要使用这个算法那么 首先先要对数组进行排序. 其实有三个指针,开始指针,末尾指针,中间指针,来开始.折半查找. 步骤如下: 1.确定三个指针,start,end,middleIndex. 2.判断start<=end,如果满足,就执行这个方法,不满足,就返回,找不到. 3.在2的前提下,我们对其折半查找,middleIndex = start+end >> 1,取中间值. 4.判断中间位置的值和目标值是否

leetcode 69.x的平方根(Java 二分查找 easy)

https://leetcode-cn.com/problems/sqrtx/ 实现int sqrt(int x)函数,给定一个数字,求sqrt(x)并且保留整数部分. 二分查找,令l=1,h=x,判断l<=h,当跳出循环时,即sqrt(x)不为整数时,return h,因为跳出循环时l>h,本题要求只保留整数部分,不四舍五入. class Solution { public int mySqrt(int x) { if(x<=1) return x; int l=1,h=x; whil

java二分查找

import java.util.Scanner; import java.util.Arrays; public class Erfen {     public static void main(String[]args)     {         Scanner sca=new Scanner(System.in);         int[] arr={15,22,13,44,5,623,734,18,92,10};         Arrays.sort(arr);         

java:二分查找

package com.my.Test; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class MainTest { public static void main(String[] args) { List<Integer> list = new ArrayList(); list.add(new Integer(13)); list.add(new Inte

java 二分查找法

public class QueryDemo { public static void main(String[] args) { int[] arr2 = new int[] { 11, 3,32,34, 45, 56, 78 }; System.out.println("67在数组中的位置:" + halfSearch(arr2, 11)); } public static int halfSearch(int[] arr, int value) { // 定义3个变量 min,

leetcode 744.寻找比目标字母大的最小字母(Java 二分查找 easy)

https://leetcode-cn.com/problems/find-smallest-letter-greater-than-target/submissions/ class Solution { public char nextGreatestLetter(char[] letters, char target) { int n=letters.length; int l=0,h=n-1; while(l<=h){ int mid=l+(h-l)/2; if(letters[mid]