Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找
一,数组翻转
1.概述:数组对称索引位置上的元素互换,最大值数组序号是数组长度减一
创建跳板temp,进行min和max的互换,然后min自增,max自减,当min>=max的时候停止互换,代表到中间值

用代码实现
public class Demo01Reverse {public static void main(String[] args) {//定义一个静态数组 int arr [] ={1,2,3,4,5,6,7};for(int min=0,max = arr.length-1;min<max;min++,max--){//进行换位int temp = arr[min];arr[min]= arr[max];arr[max]= temp;}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}
}
二,冒泡排序
数组的排序,是将数组中的元素按照大小进行排序,默认都是以升序的形式进行排序,数组排序的方法很多,我们讲解的是数组的冒泡排序。
排序,都要进行数组 元素大小的比较,再进行位置的交换。冒泡排序法是采用数组中相邻元素进行比较换位。
arr[i](前一个元素) arr[i+1](后一个元素)
比如以下数组
5 4 3 2 1
进行0,1号位的数字比较
4 5 3 2 1
然后又进行1,2号位的数字比较
4 3 5 2 1
然后2,3号位比较
4 3 2 5 1
最后3,4号位比较
4 3 2 1 5
实现位置的交换依然和前面数组翻转一样,创建一个跳板temp进行交换
代码实现
首先,定义数组
public class Demo02Bubble {public static void main(String[] args) {int[] arr = {5,4,3,2,1};
进行第一轮冒泡
/* 第一圈 */for (int i = 0; i < arr.length; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}
测试,出现警告

这是为什么呢
其实是循环的时候突破了数组的最大序号
因为arr.length就等于5,所以i能取到的最大值是4,所以i+1=5,突破了最大限制
改为arr.length-1

成功,然后进行第二圈
//第二圈for (int i = 0; i < arr.length-1; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}
第二圈代码和第一圈一样,也没问题,但也和第一圈一样比较了4次,但我们可以不必做这个重复功,因为第一次比较完了一个数,所以我们可以减去一次循环来表示可以少比较的次数,所以可以写成arr.length-1-1,最后面减的这个数可以看成是前面冒泡过的数的个数(圈数)
//第二圈for (int i = 0; i < arr.length-1-1; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}
现在进行第三圈第四圈,同样我们减去前面冒泡过的数的个数
//第三圈for (int i = 0; i < arr.length-1-2; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}//第四圈for (int i = 0; i < arr.length-1-3; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}
运行结果

但我们可以再进行优化,这几圈的变化非常细微,只有一个数一个位置在变
如果最后面减的数是前面的圈数的话,那也就等于i啊,我们可以再在外面套一层循环,利用自加i来代替这几圈唯一变的减数
/*
外层循环代表比较了几圈n-1圈
*/for (int j = 0; j < arr.length-1; j++) {for (int i = 0; i < arr.length-1-j; i++) {/*内层循环代表每一圈比较的次数每圈都少比较一次*/if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}}
由此而来,化繁为简,减小了时间,空间复杂度
完整代码如下
public class Demo02Bubble {public static void main(String[] args) {int[] arr = {5,4,3,2,1};/*第一圈越界原因:当i变化到4的时候-> arr[4]>arr[5] -> 直接操作了5索引,所以越界了越界解决:我们可以让arr.length-1如果arr.length-1-> 比较就是i<4 -> 此时i最大可以变化到3当i变化到3时 -> arr[3]>arr[4] -> 正好是最后两个元素进行比较*/for (int i = 0; i < arr.length-1-0; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}//第二圈/*for (int i = 0; i < arr.length-1-1; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}*///第三圈/*for (int i = 0; i < arr.length-1-2; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}*///第四圈/*for (int i = 0; i < arr.length-1-3; i++) {if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}*//*外层循环代表比较了几圈n-1圈*/for (int j = 0; j < arr.length-1; j++) {for (int i = 0; i < arr.length-1-j; i++) {/*内层循环代表每一圈比较的次数每圈都少比较一次*/if(arr[i]>arr[i+1]){int temp = arr[i];arr[i] = arr [i+1];arr[i+1] = temp;}}}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+" ");}}
}
三,二分查找(一尺之锤,日取其半,万世不竭)
1.前提:数组中的数据必须是有序的
2.查询思想:
a.老式查询:遍历数组,一个一个比较 -> 查询效率慢
b.二分查找:每次找中间索引对应的元素进行比较查询(每一次查询少一半数据)

首先,因为min和max会因为查找数所在数组的位置不同而改变所以不能定义min就是arr[0]或max就是arr[8],min默认为0,max为arr.length-1,mid就是二者取中。
key为查询数,是指想查的数组中的数,查询出的是数组序数代表 含的数。
前提:当min<=max时
当查询数大于或小于数组序数上所代表的数时,通过移动min和max直接排掉一半的数,来不断的锁定范围,直到找到查询数所在的位置(这个方法很像一尺之锤,日取其半,万世不竭,不过是有目标的取),当查询数等于数组序数上所代表的数时,停止查找,返回序数表示找到了。
当然还有特殊情况,就是查询数不存在在数组中,那么当min>max时,就不找了,返回-1表示找不到。
代码实现
public static int binary(int[] arr,int data){//定义三个变量,分别代表最大索引,最小索引,中间索引int min = 0;int max = arr.length-1;int mid = 0;//查找while (min<=max){mid = (min+max)/2;if(data>arr[mid]){min = mid+1;}else if(data<arr[mid]){max = mid-1;}else{return mid;}}return -1;}
我们发现代码实现和理论方法步骤不同,没有在一开始表示mid = (min+max)/2,因为要循环的算中间索引,在一进入循环时,在while(外层循环)内,再进行计算。
在main函数内调用方法进行输出,完整代码如下
public class Demo03Binary {public static void main(String[] args) {int[] arr = {1,2,3,4,5,6,7,8,9};int index = binary(arr, 7);System.out.println(index);}public static int binary(int[] arr,int data){//定义三个变量,分别代表最大索引,最小索引,中间索引int min = 0;int max = arr.length-1;int mid = 0;//查找while (min<=max){mid = (min+max)/2;if(data>arr[mid]){min = mid+1;}else if(data<arr[mid]){max = mid-1;}else{return mid;}}return -1;}
}
输入7

相关文章:
Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找
一,数组翻转 1.概述:数组对称索引位置上的元素互换,最大值数组序号是数组长度减一 创建跳板temp,进行min和max的互换,然后min自增,max自减,当min>max的时候停止互换,代表到中间值 用代码实…...
ARM 架构(Advanced RISC Machine)精简指令集计算机(Reduced Instruction Set Computer)
文章目录 1、ARM 架构ARM 架构的特点ARM 架构的应用ARM 架构的未来发展 2、RISCRISC 的基本概念RISC 的优势RISC 的应用RISC 与 CISC 的对比总结 1、ARM 架构 ARM 架构是一种低功耗、高性能的处理器架构,广泛应用于移动设备、嵌入式系统以及越来越多的服务器和桌面…...
7.STM32之通信接口《精讲》之USART通信---多字节数据收发(数据包的模式:HEX数据包和文本数据包)
根据上一节的HEX数据包的设计完成,本节将完成文本数据包的编写,(HEX数据包其实本质就是原始数据,文本数据包我么要接收到还要对照ASCll进行解析封装) 有不懂的可参考上一节的讲解!!ÿ…...
基于Vue+SpringBoot的求职招聘平台
平台概述 本平台是一个高效、便捷的人才与职位匹配系统,旨在为求职者与招聘者提供一站式服务。平台内设三大核心角色:求职者、招聘者以及超级管理员,每个角色拥有独特的功能模块,确保用户能够轻松完成从信息获取到最终录用的整个…...
WebRTC 和 WebSocket
WebRTC 和 WebSocket 是两种不同的技术,虽然它们都用于在浏览器之间进行通信,但它们的设计目标和使用场景有所不同。以下是它们之间的主要区别: 目的和使用场景 WebRTC: 主要用于实现实时音视频通信。 支持点对点(P2P)…...
小车综合玩法--5.画地为牢
一、实验准备 前面我们利用四路巡线模块巡线,现在我们利用这个特性,用黑线将小车围起来,让小车一直在我们围的圈内运动。 1.小车接线已安装,且安装正确 2.调试四路巡线模块遇黑线时指示灯亮。不是黑线时指示灯灭。 二、实验原理…...
数据库课程设计全流程:方法与实例解析
--- ### 一、数据库课程设计概述 数据库课程设计是学习数据库理论知识的重要实践环节,旨在帮助学生掌握数据库设计和应用系统开发的完整流程,包括需求分析、数据库设计、功能实现以及性能优化。 #### **设计目标** 1. 掌握数据库设计的基本步骤和原则…...
用Ruby编写一个自动化测试脚本,验证网站登录功能的正确性。
测试准备:从江河湖海到代码世界的奇妙之旅 亲爱的朋友们,你们好!今天我要带你们进入一个神奇的世界——测试的世界。在这里,我们将会看到各种各样的测试用例,它们就像江河湖海一样,汇聚在一起,…...
跳表 | 基本概念 | 代码实现
文章目录 1.跳表的基本概念2.跳表的结构3.跳表的增删改查4.完整代码 1.跳表的基本概念 跳表的本质是一种查找结构,一般查找问题的解法分为两个大类:一个是基于各种平衡树,一个是基于哈希表,跳表比较的特殊,它独成一派…...
分数加减
#include <stdio.h> #include <stdlib.h>// 求最大公因数 int gcd(int a, int b) {return b 0? a : gcd(b, a % b); }// 化简分数 void simplify(int *num, int *den) {int g gcd(*num, *den);*num / g;*den / g;if (*den < 0) {*num * -1;*den * -1;} }//…...
基于卷积神经网络的皮肤病识别系统(pytorch框架,python源码,GUI界面,前端界面)
更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示: 皮肤病识别系统 vgg16 resnet50 卷积神经网络 GUI界面 前端界面(pytorch框架 python源码)_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的皮肤病识…...
QT与嵌入式——获取网络实时时间
目录 1、使用QT通过网络API接口获取网络实时时间 1.1、首先在网上找一个获取实时时间的API接口 1.2、 根据第一步获取的链接来发送请求 1.3、通过connect链接信号与槽 注意的点: 2、为什么需要网络实时时间 3、获取本机的实时时间 4、顺带提一句 1、使用QT通过…...
优化装配,提升品质:虚拟装配在汽车制造中的关键作用
汽车是各种零部件的有机结合体,因此汽车的装配工艺水平和装配质量直接影响着汽车的质量与性能。在汽车装配过程中,经常会发生零部件间干涉或装配顺序不合理等现象,且许多零部件制造阶段产生的质量隐患要等到实际装配阶段才能显现出来…...
Bug的严重等级和优先级别与分类
目录 前言 1. Bug的严重等级定义 2.Bug的优先等级 3.一般 BUG 的正规的处理流程 4.BUG严重等级划分 5.BUG紧急程度定义 前言 Bug是指在软件开发或者系统运行过程中出现的错误、缺陷或者异常情况。它可能导致系统无法正常工作、功能不完整、数据错误或者界面异常等问题。 …...
游戏引擎学习第13天
视频参考:https://www.bilibili.com/video/BV1QQUaYMEEz/ 改代码的地方尽量一张图说清楚吧,懒得浪费时间 game.h #pragma once #include <cmath> #include <cstdint> #include <malloc.h>#define internal static // 用于定义内翻译单元内部函数 #…...
bind返回失败(ctrl+c)结束后不能再次加载
问题现象(VxWorks): 在测试的时候发现使用ctrlc打断程序后再次调用bind绑定失败 错误返回 0x30 问题分析: 1、程序没有开启端口复用。 2、程序在使用ctrlc打断后 vxWorks的打断和linux不相同,并没有清除底层的端口&a…...
菜鸟驿站二维码/一维码 取件识别功能
特别注意需要引入 库文 ZXing 可跳转: 记录【WinForm】C#学习使用ZXing.Net生成条码过程_c# zxing-CSDN博客 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Net.…...
23种设计模式-备忘录(Memento)设计模式
文章目录 一.什么是备忘录设计模式?二.备忘录模式的特点三.备忘录模式的结构四.备忘录模式的优缺点五.备忘录模式的 C 实现六.备忘录模式的 Java 实现七.总结 类图: 备忘录设计模式类图 一.什么是备忘录设计模式? 备忘录设计模式(…...
搜维尔科技:Manus遥操作五指机械手专用手套惯性高精度虚拟现实
Manus遥操作五指机械手专用手套惯性高精度虚拟现实 搜维尔科技:Manus遥操作五指机械手专用手套惯性高精度虚拟现实...
MySql面试题.运维面试题之五
《(全国)MySQL数据库DBA测试题-第1套》 卷面总分 题号 单选题 多选题 判断题 100 题分 42 40 18 得分 一、单选题(每题3分,共计42分;得分____) 1. 二进制rpm包安装的mysql数据库,默认的数据文件存放在如下哪个目录里? A、/usr/local/mysql B、/tmp/ C、/var/lib/my…...
蓝牙窃密攻防实战:从协议漏洞到固件后门,国家安全部警示的近场威胁全解析
2026年5月11日,国家安全部官方发布重磅警示,明确指出蓝牙设备已成为不法分子实施近距离窃密、监听、跟踪的"隐形獠牙"。从日常使用的无线耳机、智能手表,到办公场景的蓝牙键鼠、会议音箱,再到工业控制中的蓝牙传感器&am…...
LeagueAkari游戏数据分析工具:从新手到高手的完整进阶攻略
LeagueAkari游戏数据分析工具:从新手到高手的完整进阶攻略 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英雄联盟游戏…...
FcμR识别IgM复杂机制的揭示:解锁人体免疫早期应答之谜
一、引言免疫系统是机体抵御病原体入侵、维持内环境稳定的关键防线。在免疫应答过程中,不同类型的免疫球蛋白发挥着独特的作用。其中,IgM作为人体五类免疫球蛋白之一,在免疫应答早期起着至关重要的作用。而Fc受体作为免疫系统中的重要组成部分…...
Picotron实战案例:在8个H100 GPU上训练SmolLM-1.7B模型的完整指南
Picotron实战案例:在8个H100 GPU上训练SmolLM-1.7B模型的完整指南 【免费下载链接】picotron Minimalistic 4D-parallelism distributed training framework for education purpose 项目地址: https://gitcode.com/gh_mirrors/pi/picotron Picotron是一个极简…...
收藏必备!小白程序员轻松入门大模型:RAG架构详解与实践
本文详细介绍了检索增强生成(RAG)架构,旨在帮助初学者理解大模型如何结合外部知识库提升回答的准确性和时效性。文章涵盖了RAG的四种架构类型、黑盒与白盒增强策略、知识库构建、查询与检索增强方法,以及系统评估和优化增强过程。…...
HoRain云--PHP安全插入MySQL数据指南
🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...
AI技能gate-of-oss:智能海巡GitHub,高效开源项目选型
1. 项目概述:一个帮你“海巡”GitHub的AI技能在软件开发这个行当里,我敢说,几乎每个开发者都经历过这样的时刻:为了解决一个具体问题,或者想给项目引入一个新功能,一头扎进GitHub的汪洋大海,试图…...
OpenClaw:重新定义 AI 智能体,从对话到执行的全能 “龙虾
在 AI 技术飞速迭代的今天,大语言模型已能流畅对话、生成内容,但多数仍停留在 “只说不做” 的层面。OpenClaw(外号 “龙虾”)的出现,打破了这一僵局 —— 它是一款由奥地利工程师 Peter Steinberger 主导开发…...
Atlas框架:机器学习全生命周期的安全审计与验证
1. Atlas框架:机器学习生命周期的安全守护者在机器学习(ML)模型日益渗透到金融、医疗等关键领域的今天,一个令人不安的事实逐渐浮出水面:从数据采集到模型部署的整个生命周期中,每个环节都可能成为攻击者的…...
AirMapView自定义地图类型开发:扩展新的地图提供商完整指南 [特殊字符]️
AirMapView自定义地图类型开发:扩展新的地图提供商完整指南 🗺️ 【免费下载链接】AirMapView A view abstraction to provide a map user interface with various underlying map providers 项目地址: https://gitcode.com/gh_mirrors/ai/AirMapView …...
