[{"createTime":1735734952000,"id":1,"img":"hwy_ms_500_252.jpeg","link":"https://activity.huaweicloud.com/cps.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=V1g3MDY4NTY=&utm_medium=cps&utm_campaign=201905","name":"华为云秒杀","status":9,"txt":"华为云38元秒杀","type":1,"updateTime":1735747411000,"userId":3},{"createTime":1736173885000,"id":2,"img":"txy_480_300.png","link":"https://cloud.tencent.com/act/cps/redirect?redirect=1077&cps_key=edb15096bfff75effaaa8c8bb66138bd&from=console","name":"腾讯云秒杀","status":9,"txt":"腾讯云限量秒杀","type":1,"updateTime":1736173885000,"userId":3},{"createTime":1736177492000,"id":3,"img":"aly_251_140.png","link":"https://www.aliyun.com/minisite/goods?userCode=pwp8kmv3","memo":"","name":"阿里云","status":9,"txt":"阿里云2折起","type":1,"updateTime":1736177492000,"userId":3},{"createTime":1735660800000,"id":4,"img":"vultr_560_300.png","link":"https://www.vultr.com/?ref=9603742-8H","name":"Vultr","status":9,"txt":"Vultr送$100","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":5,"img":"jdy_663_320.jpg","link":"https://3.cn/2ay1-e5t","name":"京东云","status":9,"txt":"京东云特惠专区","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":6,"img":"new_ads.png","link":"https://www.iodraw.com/ads","name":"发布广告","status":9,"txt":"发布广告","type":1,"updateTime":1735660800000,"userId":3},{"createTime":1735660800000,"id":7,"img":"yun_910_50.png","link":"https://activity.huaweicloud.com/discount_area_v5/index.html?fromacct=261f35b6-af54-4511-a2ca-910fa15905d1&utm_source=aXhpYW95YW5nOA===&utm_medium=cps&utm_campaign=201905","name":"底部","status":9,"txt":"高性能云服务器2折起","type":2,"updateTime":1735660800000,"userId":3}]
给定一个规模为n的按照数字从小到大排序的数组,快速查询x元素在数组中的位置
示例:
数组:[1,3,6,9,14,35,67] 查找的值:9 输出:3
<>1、计算数据规模为n二分查找的时间复杂度
循环次数 剩下的数据规模
第一次查找: T(1) = n/2
第二次查找: T(2) = n/2^2
第三次查找: T(3) = n/2^3
…
第M次查找: T(M) = n/2^M
数据规模大于等于1即 n/2^M >=1 ,说明不能再继续二分查找的操作,当数据规模达到最小值1时即n/2^M =1则是最坏的查找情况。
T(M) = n/2^M = 1 得到M=O(N)=log2n,二分查找的时间复杂度为以2为底数n为指数的对数。
<>2、算法如下
package com.example.algorithm; /** * 给定一个规模为n的按照数字从小到大排序的数组,快速查询x元素在数组中的位置 *
<p> * 示例: * <p> * <p> * 数组:[1,3,6,9,14,35,67] * * <p> * <p> * 查找的值:9 * <p> *
<p> * 输出:3 * * @author xukaijun5 * @since 2021/11/2 **/ public class Day20211102
{ public static int getIndex(int[] source, int target) { int left = 0; int right
= source.length - 1; int mid; while (left <= right) { mid = (left + right) >> 1;
if (source[mid] == target) { return mid; } else if (source[mid] > target) {
right= mid - 1; } else { left = mid + 1; } } return -1; } public static void
main(String[] args) { int[] source = new int[]{1, 3, 6, 9, 14, 35, 67}; System.
out.println(getIndex(source, 9)); } }