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 算法——二分查找数组集合关键元素相关推荐

  1. java input 数组_Java基础之:数组

    Java基础之:数组 一组相同数据类型的数据,我们即称之为 数组,数组也是一种数据类型. 需要注意的是 , 数组和String 字符串 相同,也是引用类型的. 数组的初始化 方式一:动态初始化 四种格 ...

  2. java怎么定义一维数组_Java定义一个一维数组有哪几种方法

    展开全部 首先: 一维62616964757a686964616fe59b9ee7ad9431333366306432数组的声明 ; 代码如下int[] ary1; //Java推荐的数组声明方式 i ...

  3. java反转数组_Java中如何将数组反转?Java数组反转的2种方法(代码示例)

    数组操作Java数组如何反转输出?下面本篇文章就给大家介绍2种在java中实现数组反转的简单方法.有一定的参考价值,希望对大家有所帮助.[视频教程推荐:java教程] 方法一:使用循环,交换数组中元素 ...

  4. java大括号定义数组_Java基础语法_数组

    数组的概念 数组的概念:是一种容器,可以同时存放多个数据值 数组的特点: 1.数组是一种引用数据类型 2.数组当中的多个数据,类型必须统一 3.数组的长幅在程序运行期间不可改变 数组的定义格式 数组的 ...

  5. java scanner输入数组_java基础- scanner/方法/数组

    1.用户交互scanner Next() public class demo1 { public static void main(String[] args) { //创建一个scanner对象 S ...

  6. arrays中copyof复制两个数组_Java教程分享之数组知识梳理

    Java是一门面向对象编程语言,具有简单易用.功能强大的特征.数组是同类型数据的有序集合,在Java中是引用数据类型,引用数据类型值都存储在堆中.有很多新手初学Java数组觉得难度大,接下来就给大家简 ...

  7. java 计算i 出现的次数_JAVA算法:按照给定的段落统计单词出现次数(JAVA代码)...

    https://blog.csdn.net/seagal890/article/details/92067644 JAVA算法:按照给定的段落统计单词出现次数(JAVA代码) 写一个 JAVA程序以统 ...

  8. leetcode 028.实现strStr(),即查找重复字符串(KMP算法)

    前言 本题是经典的字符串单模匹配的模型,因此可以使用字符串匹配算法解决,常见的字符串匹配算法包括暴力匹配.Knuth-Morris-Pratt 算法.Boyer-Moore 算法.Sunday 算法等 ...

  9. java 静态数组_java(四)创建静态数组

    一.静态数组要分配内存空间 语法:type[] ary = new type[number]; int[] ary; 声明数组是什么类型:内存空间为5的数组: ary=new int[5]; 用法: ...

最新文章

  1. 《LeetCode力扣练习》第338题 比特位计数 Java
  2. mysql group by 区间_SQL按区间进行group by
  3. win7下python的安装与配置_Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程...
  4. windows 下Android的开发准备
  5. Spring-JdbcTemplate基本使用
  6. php里面的耗时操作,PHP执行时间那点事
  7. Flink Kafka Connector 与 Exactly Once 剖析
  8. Object slicing(对象切片)
  9. java 关键字 assert的学习
  10. 怎样隐藏Word内容?这样操作只需30秒!
  11. 湘南巷子商城“0元购”逆袭上线
  12. 轮滑运动相关html网页,轮滑运动进校园
  13. 0基础学RS(十一)VLAN知识点,VLAN的类型,VLAN中继(trunk),本征VLAN
  14. 最全的Windows Azure学习教程汇总
  15. 使用zepto.js完成的手机相册
  16. 云主机安全加固最佳实践指导书
  17. cpprestsdk 上传和下载文件
  18. HDOJ2502月之数
  19. php简单在线考试系统
  20. 侯杰(面向对象上01)面向对象简介

热门文章

  1. 无代码时代下,程序员不够用了!
  2. 现在入坑 AI 太迟?这些程序员发现了掘金新出路
  3. JavaScript 你必须了解的主流趋势!
  4. 小米 10 年再创业,高端 5G 手机和 AIoT 有多少机会?
  5. 一年多的远程办公带给我的感悟
  6. 2019 世界读书日,让程序员疯狂的 13 本豆瓣高分技术书!
  7. 华米 OV 一加“征服”印度?!
  8. 程序媛爬取了 5 个 APP 的 4220 个数据,解读过去的一年到底过得怎么样!
  9. AWS 开战 MongoDB!
  10. 网易考拉的服务架构如何从单体应用走向微服务化? | 技术头条