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

简介:

二分查找:


这个算法是比较简单的,容易理解的。这个算法是对有序的数组进行查找,所以想要使用这个算法那么

首先先要对数组进行排序。


其实有三个指针,开始指针,末尾指针,中间指针,来开始。折半查找。

步骤如下:

1、确定三个指针,start,end,middleIndex。

2、判断start<=end,如果满足,就执行这个方法,不满足,就返回,找不到。

3、在2的前提下,我们对其折半查找,middleIndex = start+end >> 1,取中间值。

4、判断中间位置的值和目标值是否相等,如果相等就返回这个位置。

不相等,如果中间位置的值比目标值大,就在左半边的数组来递归查找这个目标值,

否则在右边的数组查找递归这个目标值。

5.返回值。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package  com.test4;
 
/**
  * 二分查找
 
  * @author sdc
  *
  */
public  class  BinarySearch {
 
     // 查找某个元素需要的次数
     static  int  count;
     
     public  static  void  main(String[] args) {
         
     }
 
     /**
      * 二分查找--递归的形式,二分查找是对有序的数组查找
     
      * @param sortArray
      * @param start
      * @param end
      * @param target
      * @return
      */
     public  static  int  binarySearch( int [] sortArray,  int  start,  int  end,  int  target) {
 
         if  (sortArray ==  null ) {
             return  - 1 ;
         }
 
         int  sortArrayLength = sortArray.length;
         if  (sortArrayLength ==  1 ) {
             return  sortArray[ 0 ];
         }
 
         count++;
         // 真正开始了,查找
         if  (start <= end) {
 
             // 中间的位置
             int  middleIndex = (start + end) >>  1 ;
             // 中间的值
             int  middleData = sortArray[middleIndex];
 
             if  (middleData == target) {
                 return  middleIndex;
             else  if  (middleData < target) {
                 return  binarySearch(sortArray, middleIndex +  1 , end, target);
             else  {
                 return  binarySearch(sortArray, start, middleIndex -  1 , target);
             }
         else  // 给的返回值不对
             return  - 1 ;
         }
 
     }
 
     /**
      * 二分查找-非递归的形式
     
      * @param sortArray
      * @param target
      * @return
      */
     public  static  int  serarch( int [] sortArray,  int  target) {
         if  (sortArray ==  null ) {
             return  - 1 ;
         }
 
         // 起始位置
         int  start =  0 ;
         // 结束位置
         int  end = sortArray.length -  1 ;
 
         while  (start <= end) {  // 一直循环查找
 
             // 中间位置
             int  middleIndex = (start + end) >>  1 ;
         
             if (sortArray[middleIndex] == target) {
                 return  middleIndex;
             } else  if (sortArray[middleIndex] > target) {
                 end = middleIndex - 1 ;
             } else  {
                 start = middleIndex + 1 ;
             }
         }
         
         return  - 1 ;
     }
 
}


结束:


本文转自 豆芽菜橙 51CTO博客,原文链接:http://blog.51cto.com/shangdc/1918333

相关文章
|
1月前
|
Java
java实现二分查找
java实现二分查找
16 0
|
13天前
|
算法 安全 Java
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
【4月更文挑战第28天】性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
30 1
性能工具之 JMeter 自定义 Java Sampler 支持国密 SM2 算法
|
19天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
20天前
|
搜索推荐 算法 Java
Java实现的常用八种排序算法
提到数据结构与算法,无法避免的一点就包含排序,熟练的掌握各种排序算法则是一个程序员必备的素质之一,除此之外,排序算法也是当下各大技术公司比较喜欢问的技术点,所以,就这一点JavaBuild整理了常见的8种排序算法
11 0
|
24天前
|
机器学习/深度学习 数据采集 算法
使用 Java 实现机器学习算法
【4月更文挑战第19天】Java在数据驱动时代为机器学习提供支持,具备丰富的数学和数据结构库,适用于实现线性回归、决策树、SVM和随机森林等算法。实现时注意数据预处理、模型选择、评估指标和可视化。利用Java的库和编程能力可构建高效模型,但需按问题需求选择合适技术和优化方法。
|
1月前
|
算法 测试技术 Serverless
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
|
1月前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出&quot;验证成功&quot;,否则输出&quot;验证失败&quot;。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。
|
1月前
|
搜索推荐 Java
Java排序算法
Java排序算法
20 0
|
1月前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
25 4
|
3天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。