java二分查找算法字符串数组_Java 算法——二分查找数组集合关键元素
packagecom.sinosoft;import java.util.*;importjava.util.stream.Stream;/***@authorCreated by xushuyi
* @Description
* @date 2019/1/17 10:41*/
public classArrayTest {public static voidmain(String[] args) {/*** 1. 遍历一个数组 获取最大值
* 2. 采用二分法*/getArrayMaxVal();
}/*** 1. 遍历一个数组 获取最大值
* 2. 采用二分法,前提必须是连续(升序/降序)数组,前提没有重复元素*/
private static voidgetArrayMaxVal() {//定义一个list数组集合
List list = new ArrayList<>(100);
addListVal(list);
System.out.println("集合:" +list);//默认是 按照升序排列//Collections.sort(list);//数组反转//Collections.reverse(list);//通过比较策略 来按照升序/降序排列
Collections.sort(list, new Comparator() {
@Overridepublic intcompare(Integer o1, Integer o2) {return o1 - o2; //升序 如果 o1 小于 o2 返回 -1, 相等返回 0 ,o1 大于 o2 返回 1//return o2 - o1;//降序 如果 o1 小于 o2 返回 1, 相等返回 0 ,o1 大于 o2 返回 -1
}
});
System.out.println("排序后:" +list);//集合开始位置
int startIndex = 0;//集合结束位置
int endIndex = list.size() - 1;//定义查找集合中的元素
int key = 2;//采用递归的方式进行查找(推荐)
int val =searchList(list, startIndex, endIndex, key);
System.out.println("递归查找结果:" +val);//采用非递归的方式进行查找
val =searchList1(list, startIndex, endIndex, key);
System.out.println("非递归查找结果:" +val);
}/*** 采用二分法来查找集合中的关键元素
*
*@paramlist 有序集合
*@paramstartIndex 集合开始下标
*@paramendIndex 集合结束下标
*@paramkey 查找关键元素
*@returnint*/
private static intsearchList1(
Listlist,intstartIndex,intendIndex,intkey) {//满足 开始下标 不大于 结束下标才行
while (startIndex <=endIndex) {int middleIndex = (endIndex - startIndex) / 2 +startIndex;if (key ==list.get(middleIndex))returnmiddleIndex;if (key >list.get(middleIndex))//说明在[middle, end]之间,需要重置 开始下标为 中间位置+1,抛弃[start,middle]集合查找
startIndex = middleIndex + 1;else if (key
endIndex = middleIndex - 1;else
//集合中没有找到指定的元素
return -1;
}return -1;
}/*** 采用二分法查找集合中的关键元素
* 采用递归的方式
*
*@paramlist 有序集合
*@paramstartIndex 开始下标
*@paramendIndex 结束下标
*@paramkey 查找关键元素*/
private static intsearchList(
Listlist,intstartIndex,intendIndex,intkey) {int middleIndex = (endIndex - startIndex) / 2 +startIndex;
System.out.println("中间位置:" +middleIndex);if (key ==list.get(middleIndex)) {returnmiddleIndex;
}if (startIndex >=endIndex) {return -1;
}//说明在 [middle,end]之间
else if (key >list.get(middleIndex)) {return searchList(list, middleIndex + 1, endIndex, key);
}//说明在[start, middle]之间
else if (key
}else{return -1;
}
}/*** 对list集合进行赋值
*
*@paramlist 集合*/
private static void addListVal(Listlist) {//for (int i = 0; i < 88; i++) {//list.add(i);//}
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(7);
list.add(8);
list.add(9);
list.add(10);
list.add(5);
list.add(6);
}
}
java二分查找算法字符串数组_Java 算法——二分查找数组集合关键元素相关推荐
- java input 数组_Java基础之:数组
Java基础之:数组 一组相同数据类型的数据,我们即称之为 数组,数组也是一种数据类型. 需要注意的是 , 数组和String 字符串 相同,也是引用类型的. 数组的初始化 方式一:动态初始化 四种格 ...
- java怎么定义一维数组_Java定义一个一维数组有哪几种方法
展开全部 首先: 一维62616964757a686964616fe59b9ee7ad9431333366306432数组的声明 ; 代码如下int[] ary1; //Java推荐的数组声明方式 i ...
- java反转数组_Java中如何将数组反转?Java数组反转的2种方法(代码示例)
数组操作Java数组如何反转输出?下面本篇文章就给大家介绍2种在java中实现数组反转的简单方法.有一定的参考价值,希望对大家有所帮助.[视频教程推荐:java教程] 方法一:使用循环,交换数组中元素 ...
- java大括号定义数组_Java基础语法_数组
数组的概念 数组的概念:是一种容器,可以同时存放多个数据值 数组的特点: 1.数组是一种引用数据类型 2.数组当中的多个数据,类型必须统一 3.数组的长幅在程序运行期间不可改变 数组的定义格式 数组的 ...
- java scanner输入数组_java基础- scanner/方法/数组
1.用户交互scanner Next() public class demo1 { public static void main(String[] args) { //创建一个scanner对象 S ...
- arrays中copyof复制两个数组_Java教程分享之数组知识梳理
Java是一门面向对象编程语言,具有简单易用.功能强大的特征.数组是同类型数据的有序集合,在Java中是引用数据类型,引用数据类型值都存储在堆中.有很多新手初学Java数组觉得难度大,接下来就给大家简 ...
- java 计算i 出现的次数_JAVA算法:按照给定的段落统计单词出现次数(JAVA代码)...
https://blog.csdn.net/seagal890/article/details/92067644 JAVA算法:按照给定的段落统计单词出现次数(JAVA代码) 写一个 JAVA程序以统 ...
- leetcode 028.实现strStr(),即查找重复字符串(KMP算法)
前言 本题是经典的字符串单模匹配的模型,因此可以使用字符串匹配算法解决,常见的字符串匹配算法包括暴力匹配.Knuth-Morris-Pratt 算法.Boyer-Moore 算法.Sunday 算法等 ...
- java 静态数组_java(四)创建静态数组
一.静态数组要分配内存空间 语法:type[] ary = new type[number]; int[] ary; 声明数组是什么类型:内存空间为5的数组: ary=new int[5]; 用法: ...
最新文章
- 《LeetCode力扣练习》第338题 比特位计数 Java
- mysql group by 区间_SQL按区间进行group by
- win7下python的安装与配置_Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程...
- windows 下Android的开发准备
- Spring-JdbcTemplate基本使用
- php里面的耗时操作,PHP执行时间那点事
- Flink Kafka Connector 与 Exactly Once 剖析
- Object slicing(对象切片)
- java 关键字 assert的学习
- 怎样隐藏Word内容?这样操作只需30秒!
- 湘南巷子商城“0元购”逆袭上线
- 轮滑运动相关html网页,轮滑运动进校园
- 0基础学RS(十一)VLAN知识点,VLAN的类型,VLAN中继(trunk),本征VLAN
- 最全的Windows Azure学习教程汇总
- 使用zepto.js完成的手机相册
- 云主机安全加固最佳实践指导书
- cpprestsdk 上传和下载文件
- HDOJ2502月之数
- php简单在线考试系统
- 侯杰(面向对象上01)面向对象简介