折半查找(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月前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
37 10
|
1月前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
122 4
|
1月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
38 4
|
1月前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
56 1
|
4月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
126 43
Java学习十六—掌握注解:让编程更简单
|
4月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
69 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
|
3月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
3月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
4月前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
49 2
|
4月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
83 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用

热门文章

最新文章