首页 » 网站建设 » phparray查找技巧_轻松掌握二分法查找

phparray查找技巧_轻松掌握二分法查找

访客 2024-12-04 0

扫一扫用手机浏览

文章目录 [+]

二分查找的思想:在一个长度为n的有序数组中查找值即是m的元素位置,先取数组中间位置 mid 的元素与其比较。
如果值即是 m 则返回 mid 值,小于 m 则在数组 0 至 mid-1 区间上按照此方法连续比较查找,大于 m 则在数组 mid + 1 至 n 区间上按照此方法连续比较查找。

韶光繁芜度

假设统共有n个元素,每次查找的区间大小便是n,n/2,n/4,…,n/2^k(操作元素的剩余个数),个中k便是循环的次数。

phparray查找技巧_轻松掌握二分法查找

由于 n/2^k 取整后>=1,即令n/2^k=1

phparray查找技巧_轻松掌握二分法查找
(图片来自网络侵删)

可得k=log2n(因此2为底,n的对数),以是韶光繁芜度表示为O(logn)

空间繁芜度

二分查找占用空间非常小,额外利用了几个临时变量如left、right、mid,因此其空间繁芜度为O(1)

动图演示

示例: 从一组有序数组[1,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59]中查询值为37的索引下标

代码实现

二分查找非递归办法代码:

/ 二分查找(非递归办法) @param arr有序数组 @param num 查找元素值 @return boolean /public static int find(int[] arr, int num) {if (arr == null || arr.length == 0) {return -1;}int left = 0;int right = arr.length - 1;while (left <= right) {int mid = (left + right) / 2;if (arr[mid] == num) {return mid;} else if (arr[mid] < num) {left = mid + 1;} else {right = mid - 1;}}return -1;}

二分查找递归办法代码:

/ 二分查找(递归办法) @param arr有序数组 @param num 查找元素值 @return boolean /public static int find(int[] arr, int left, int right, int num) {if (arr == null || arr.length == 0 || left > right) {return -1;}int mid = (left + right) / 2;if (arr[mid] == num) {return mid;} else if (arr[mid] < num) {return find(arr,left + 1, right, num);} else {return find(arr,left + 1, right, num);}}

测试代码:

public static void main(String[] args) {int[] array = new int[] {1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59};System.out.println("二分查找非递归办法: " + find(array, 37));System.out.println("二分查找递归办法: " + find(array, 0, array.length - 1, 37));}

结语

感谢您的阅读,请动动您可爱的小手✌~点赞,留言,关注,分享 4暴击(∩_∩)

标签:

相关文章

微信第三方登录便捷与安全的完美融合

社交平台已成为人们日常生活中不可或缺的一部分。微信作为我国最受欢迎的社交软件之一,拥有庞大的用户群体。为了方便用户在不同平台间切换...

网站建设 2025-02-18 阅读0 评论0

广东高速代码表解码高速公路管理智慧

高速公路作为国家交通动脉,连接着城市与城市,承载着巨大的物流和人流。广东作为我国经济大省,高速公路网络密布,交通流量巨大。为了更好...

网站建设 2025-02-18 阅读0 评论0

工程量代码建筑行业的数字化密码

数字化已成为各行各业转型升级的重要方向。在建筑行业,工程量代码作为一种数字化工具,正逐渐改变着传统的工程管理方式。本文将从工程量代...

网站建设 2025-02-18 阅读0 评论0