目录
顺序查找,时间复杂度是O(n),逻辑很简单,就是依次遍历一个线性的数据结构判断所要查找的目标数据是否在这个数据结构里。以下是代码实现:
- public boolean sequentialSearch(int target){
- int[] array={1,3,5,7,9,11,13,15};
- for(int i=0;i
- if(array[i]==target){
- return true;
- }
- }
- return false;
- }
3.2.二分查找
3.2.1.逻辑简介
二分查找,适用的前提是数据结构里的数据是按照升序或者降序有序排列的,时间复杂度是O(log2为底的n)。
其核心思想是折半,要查找的目标数据和当前段的中间位置的数据比较,
如果目标数据>中间位置的数据,说明要查找的目标数据只可能存在于当前段的右半段,那么就直接去右半段查找即可;
如果目标数据<中间位置的数据,说明要查找的目标数据只可能存在于当前段的左半段,那么就直接去左半段查找即可。
一直重复以上的逻辑,不断的折半载折半。
以下是逻辑简介:
准备三个指针left、mid、right,分别指向当前段的起止位置和中间位置。
查找过程停止的两个条件:
- 找到目标数据
- left、right相撞
假设要查找的目标元素为3,一共会经历如下两次折半。
3.2.2.代码示例
- public class findDemo {
- int[] array={1,3,5,7,9,11,13,15};
- int left=0;
- int right=array.length-1;
- int mid=array.length/2;
- public boolean binarySearch(int target){
- //递归出口1:如果mid位置的数据是要查找的数据,整个查找过程结束
- if(array[mid]==target){
- return true;
- }
- //递归出口2:如果直到right和left相遇数据都没有查找到,说明数据不存在
- if(right<=left){
- return false;
- }
- //在左半边进行查找
- if(target
- right=mid-1;
- mid=left+(mid-left)/2;
- }
- //在右半边进行查找
- if(target>array[mid]){
- left=mid+1;
- mid=mid+(right-mid)/2;
- }
- //递归
- return binarySearch(target);
- }
- }
-
相关阅读:
详细讲解磁盘及文件系统管理(图例解析)
etcd分布式存储
在 Nuxt.js 和 Vue.js 项目中引入第三方字体或艺术字
00后如何组织双十一大促看这一篇就够了! | 京东云技术团队
LayoutLMv2:多模态预训练用于富含视觉元素的文档理解【论文翻译】
初级项目经理 如何快速提升能力?
LinuxC/C++ 实现简单的TCP服务端
如何快速搭建自己的查题公众号教程
[附源码]计算机毕业设计springboot校园疫情管理系统
如何在 Ubuntu 上安装和使用 Nginx?
-
原文地址:https://blog.csdn.net/Joker_ZJN/article/details/127929923