折半查找(java)(边学习边更新)

简介: ---恢复内容开始--- 1 class ArrayTest3 2 { 3 public static void main(String[] args) 4 { 5 //int [] arr=new int[]{54,45,6,5,34,6...

---恢复内容开始---

 1 class ArrayTest3 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         //int [] arr=new int[]{54,45,6,5,34,656,34,2};
 6         //int index=GetIndex(arr,2);
 7         //System.out.println("index="+index);
 8 
 9         int [] arr1=new int[]{2,4,5,7,12,34,35,46,67,89,99};
10         int index1=HalfSearch(arr1,34);
11         System.out.println("index1="+index1);
12         int index2=HalfSearch_2(arr1,34);
13         System.out.println("index2="+index2);
14     }
15     /*
16     折半查找的主要思想:
17     当所要查找的值(key)大于中间值(arr[mid]),则最小值的下标(min)变为中间值下标加1(mid+1),
18     如果所要查找的值小于中间值,则最大值的下标(max)变为中间值下标减1(mid-1),
19     查找到之后返回中值下标,否则返回-1。
20     */
21     //折半查找效率较高,但是前提是数组必须是有序的
22     public static int HalfSearch(int [] arr,int key)
23     {
24         int min=0,max=arr.length-1,mid;
25         
26         while(min<max)//当最小的值的下标大于最大值就跳出循环,说明查找不到指定的值
27         {
28             mid=(min+max)/2;
29             if(key>arr[mid])
30                 min=mid+1;
31             else if(key<arr[mid])
32                 max=mid-1;
33             else 
34                 return mid;
35         }
36         return -1;
37     }
38 
39     //另一种折半排序的想法
40     public static int HalfSearch_2(int [] arr,int key)
41     {
42         int min=0,max=arr.length-1,mid;
43         mid=(min+max)/2;
44         while(arr[mid]!=key)//当中值不等于所指定的值,那就说明找不到(不存在)该值
45         {
46             mid=(min+max)/2;
47             if(key>arr[mid])
48                 min=mid+1;
49             else if(key<arr[mid])
50                 max=mid-1;
51             if(min>max)
52                 return -1;
53             mid=(min+max)/2;
54         }
55             return mid;
56     }
57 
58 
59 
60     //寻找数组值为key第一次出现的位置
61     public static int GetIndex(int arr [],int key)
62     {
63         for(int i=0;i<arr.length;i++)
64         {
65             if(arr[i]==key)
66                 return i;
67         }
68         return -1;
69     }
70 }

 

---恢复内容结束---

目录
相关文章
|
1月前
|
编解码 Oracle Java
java9到java17的新特性学习--github新项目
本文宣布了一个名为"JavaLearnNote"的新GitHub项目,该项目旨在帮助Java开发者深入理解和掌握从Java 9到Java 17的每个版本的关键新特性,并通过实战演示、社区支持和持续更新来促进学习。
79 3
|
1月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
88 43
Java学习十六—掌握注解:让编程更简单
|
18天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
1月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
33 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
26天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
47 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
1月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
33 2
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
25 3
|
1月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
31 2
|
1月前
|
存储 Java 编译器
【用Java学习数据结构系列】初识泛型
【用Java学习数据结构系列】初识泛型
20 2
下一篇
无影云桌面