【Java开发实训】day05——数组常见算法

目录

一、数组翻转

1.1示例代码

1.2适用场景

二、冒泡排序

2.1示例代码

2.2适用场景

三、二分查找

3.1示例代码

3.2适用场景


🌈嗨!我是Filotimo__🌈。很高兴与大家相识,希望我的博客能对你有所帮助。

💡本文由Filotimo__✍️原创,首发于CSDN📚。

📣如需转载,请事先与我联系以获得授权⚠️。

🎁欢迎大家给我点赞👍、收藏⭐️,并在留言区📝与我互动,这些都是我前进的动力!

🌟我的格言:森林草木都有自己认为对的角度🌟。


一、数组翻转

数组翻转是指将数组中的元素按照对称索引位置互相交换。例如,如果有一个数组 {1, 2, 3, 4, 5},翻转后变成 {5, 4, 3, 2, 1}。

1.1示例代码

数组翻转的示例代码:

public class ArrayReverseExample {public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};System.out.println("原始数组:");printArray(array);reverseArray(array);System.out.println("\n翻转后的数组:");printArray(array);}public static void reverseArray(int[] array) {int start = 0;int end = array.length - 1;while (start < end) {int temp = array[start];array[start] = array[end];array[end] = temp;start++;end--;}}public static void printArray(int[] array) {for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}}
}

运行截图:

在上面代码中,reverseArray 方法实现了数组翻转的逻辑:使用两个指针 start 和 end,分别指向数组的起始和末尾元素。在循环中,将 start 和 end 指向的元素互换,然后将 start 向右移动一位,end 向左移动一位,直到 start 不小于 end。

1.2适用场景

数组翻转的适用场景:

①        倒序输出:当需要将数组中的元素按照相反的顺序输出时,可以先对数组进行翻转,然后再遍历输出元素。

②        字符串反转:在字符串处理中,有时需要将字符串进行反转操作,此时可以将字符串转换为字符数组,对字符数组进行翻转操作,然后再将字符数组转换回字符串。

③        实现栈和队列:在实现栈(后进先出)或队列(先进先出)这样的数据结构时,可以使用数组进行存储,并通过翻转数组来实现不同的操作顺序。

二、冒泡排序

冒泡排序是一种简单的排序算法,它重复地遍历要排序的数组,比较每对相邻的元素,并依次交换顺序错误的元素,直到没有需要交换的元素为止。这个过程类似于水泡在水中上浮的过程,故名冒泡排序。

2.1示例代码

冒泡排序的示例代码:

public class BubbleSortExample {public static void main(String[] args) {int[] array = {5, 1, 12, -5, 16};System.out.println("原始数组:");printArray(array);bubbleSort(array);System.out.println("\n排序后的数组:");printArray(array);}public static void bubbleSort(int[] array) {int n = array.length;for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - 1 - i; j++) {if (array[j] > array[j + 1]) {// 交换 array[j] 和 array[j + 1]int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}}public static void printArray(int[] array) {for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}}
}

运行截图:

在上面代码中,bubbleSort 方法实现了冒泡排序算法:外层循环 for (int i = 0; i < n - 1; i++) 控制排序的轮数,其中 n 是数组的长度。内层循环 for (int j = 0; j < n - 1 - i; j++) 在每一轮中遍历数组,并比较相邻元素。如果前一个元素比后一个元素大,则交换它们的位置,确保较大的元素向右移动。

2.2适用场景

冒泡排序的适用场景:

①        小规模数据排序:冒泡排序算法简单易懂,适合处理小规模的数据(一般小于100个元素),在小数据量下性能良好。

②        几乎已排序的数组:如果数组的元素大部分已经处于正确位置,冒泡排序的性能会相对较好,因为它的优化版本可以提前结束排序过程。

③        实时数据流排序:在某些实时系统中,如果数据流入非常缓慢且对排序的实时性要求不高,可以用冒泡排序进行简单的处理。

三、二分查找

二分查找是一种高效的查找算法,适用于已排序的数组或列表。它通过反复将查找范围减半来定位目标值,直到找到目标或确定目标不存在为止。(前提:数组中的数据必须是有序的)

3.1示例代码

二分查找的示例代码:

public class BinarySearchExample {public static void main(String[] args) {int[] array = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19};int target = 11;int index = binarySearch(array, target);if (index != -1) {System.out.println("找到目标 " + target + " ,索引位置为:" + index);} else {System.out.println("目标 " + target + " 未找到。");}}public static int binarySearch(int[] array, int target) {int left = 0;int right = array.length - 1;while (left <= right) {int mid = left + (right - left) / 2;// 如果目标值在中间位置if (array[mid] == target) {return mid;}// 如果目标值比中间值小,向左侧继续查找if (array[mid] > target) {right = mid - 1;}// 如果目标值比中间值大,向右侧继续查找if (array[mid] < target) {left = mid + 1;}}// 如果没有找到目标值,返回 -1return -1;}
}

运行截图:

在上面代码中,binarySearch 方法实现了二分查找的算法:使用 left 和 right 分别表示当前查找范围的左右边界。在每一轮循环中,计算中间位置 mid。如果目标值等于 array[mid],则找到目标值,返回 mid。如果目标值小于 array[mid],则更新 right,缩小查找范围到左半部分。如果目标值大于 array[mid],则更新 left,缩小查找范围到右半部分。若最终 left > right,表示未找到目标值,返回 -1。

3.2适用场景

二分查找的适用场景:

①        有序数据:二分查找要求数据是有序的,因此适用于已经排序好的数组或列表中查找特定元素。

②        大数据量的查找:相比于线性搜索,二分查找在大数据量的情况下性能更好,因为它每次可以排除一半的数据。

③        频繁查找:如果需要多次查找同一个有序集合中的元素,一次排序、多次查找的场景适合使用二分查找。

④        需求较高的性能:对查找性能有较高要求的场景,二分查找是一个高效的算法,时间复杂度为 O(log n)。

⑤        对内存要求低:相比于哈希表等数据结构,二分查找不需要额外的存储空间,对内存要求较低。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3248241.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

node解析Excel中的考试题并实现在线做题功能

1、背景 最近公司安排业务技能考试&#xff0c;下发excel文件的题库&#xff0c;在excel里查看并不是很方便&#xff0c;就想着像学习驾考题目一样&#xff0c;一边看一边做&#xff0c;做完之后可以查看正确答案。 2、开始分析需求 题目格式如下图 需求比较简单&#xff0c;…

【ROS2】高级:解锁 Fast DDS 中间件的潜力 [社区贡献]

目标&#xff1a;本教程将展示如何在 ROS 2 中使用 Fast DDS 的扩展配置功能。 教程级别&#xff1a;高级 时间&#xff1a;20 分钟 目录 背景 先决条件在同一个节点中混合同步和异步发布 创建具有发布者的节点创建包含配置文件的 XML 文件执行发布者节点创建一个包含订阅者的节…

视频号直播回放视频下载教程

前言&#xff1a; 随着视频号的不断普及&#xff0c;现在用户在视频号中观看直播和回放的人数逐渐的增多&#xff0c;但是很多时候视频号中的直播和直播回放是无法直接下载的&#xff0c;今天我就教大家如何下载视频号中的直播回放 在这里下载回放需要软件 地瓜网络技术视频…

解锁Vue警报的迷雾:攻克“TypeError: Cannot read property ‘getAttribute’ of null”的奥秘

在Vue.js的广阔天地里&#xff0c;开发者们常常会遇到各式各样的挑战与“小惊喜”。[Vue warn]: Error in mounted hook: “TypeError: Cannot read property ‘getAttribute’ of null”这一错误&#xff0c;就像是一位不速之客&#xff0c;冷不防地在你的代码世界中留下一串令…

51单片机STC89C52RC——18.1 HC-SR04超声波测距

目的/效果 独立按键K1按下后开始测距&#xff0c;LCD显示距离&#xff08;mm&#xff09; 一&#xff0c;STC单片机模块 二&#xff0c;HC-SR04 超声波测距 2.1 HC-SR04 简介 HC-SR04超声波测距模块提供2cm~400cm的测距功能&#xff0c;精度达3mm。 2.2 时序 以上时序图表明…

【GPT-4多态大模型研究】

1.概述 GPT-4是OpenAI最新的系统&#xff0c;能够产生更安全和更有用的回应。它是一个大型的多模态模型&#xff08;接受图像和文本输入&#xff0c;输出文本&#xff09;&#xff0c;在各种专业和学术的基准测试中展现了人类水平的表现。例如&#xff0c;它在模拟的律师资格考…

Android 12系统源码_存储(二)StorageManagerService服务

前言 在 Android 系统中&#xff0c;StorageManagerService是一个用于获取存储设备信息和管理存储设备的服务。它提供了一系列方法&#xff0c;可以获取当前挂载的存储设备信息&#xff0c;以及对存储设备进行挂载和卸载操作。 一、Storage存储模块介绍 1.1、StorageManager…

Android 10.0 Launcher3拖拽图标进入hotseat自适应布局功能实现一

1.前言 在10.0的系统rom定制化开发中&#xff0c;在对于launcher3的一些开发定制中&#xff0c;在对hotseat的一些开发中&#xff0c;需要实现动态hotseat居中 的功能&#xff0c;就是在拖拽图标进入和拖出hotseat&#xff0c;都可以保持hotseat居中的功能&#xff0c;接下来分…

阿里云短信PHP集成api类

无需安装sdk扩展包&#xff0c;直接引入类即可使用 V3版本请求体&签名机制:自研请求体和签名机制 - 阿里云SDK - 阿里云 模版内容&#xff1a; <?phpnamespace common\components;use common\constant\UserConst; use common\models\bee\SmsReferer; use common\mode…

C++从入门到起飞之——类的定义/实例化 全方位剖析!

个人主页&#xff1a;秋风起&#xff0c;再归来~ C从入门到起飞 个人格言&#xff1a;悟已往之不谏&#xff0c;知来者犹可追 克心守己&#xff0c;律己则安&#xff01; 目录 1.类的定义 1.1、类定义格式 1.2、访问限定符 1.3、类域 2.实例化 2.…

备忘录删除了怎么恢复 备忘录误删恢复办法

备忘录作为我们日常生活中的得力助手&#xff0c;帮助我们记录重要事项和灵感&#xff0c;然而&#xff0c;使用中偶尔会出现误删的情况。若不能及时找回误删的内容&#xff0c;可能会造成重要信息的丢失&#xff0c;给我们的工作和生活带来不必要的麻烦。 如果你也担心备忘录…

tinymce富文本支持word内容同时粘贴文字图片上传 vue2

效果图 先放文件 文件自取tinymce: tinymce富文本简单配置及word内容粘贴图片上传 封装tinymce 文件自取&#xff1a;tinymce: tinymce富文本简单配置及word内容粘贴图片上传 页面引用组件 <TinymceSimplify refTinymceSimplify v-model"knowledgeBlockItem.content…

还在羡慕别人的爆款视频是怎么做出来的?Transform Video给你答案,让你轻松制作出爆款的作品!

大家好&#xff01;我是闷声轻创&#xff01;最近我发现了一个牛批的AI视频编辑工具——Transform Video。这款软件将彻底改变你的视频创作体验&#xff0c;来看看都有什么功能吧 先了解一下Transform Video是什么&#xff1f; Transform Video是一个革命性的AI视频编辑平台&a…

vxe-grid 实现配置式form搜索条件 form搜索条件框可折叠 配置式table

文章目录 效果图代码 效果图 代码 <template><div class"app-container"><vxe-grid refxGrid v-bind"gridOptions" v-if"tableHeight" :height"tableHeight"><template #billDate"{ data }"><e…

Linux内核编程(八) 添加自定义目录驱动菜单 (Kconfig文件使用)

本文目录 一、Linux 内核驱动目录二、自定义驱动的Kconfig编写●示例&#xff1a;在 drivers 菜单添加一个自己驱动的子菜单。 三、自写驱动的Makefile编写四、总结 一个Linux内核源码&#xff0c;其中包含了很多驱动程序&#xff0c;对应不同的功能。我们在编译内核时。如果将…

《TF2.x强化学习手册》P59-P65-SARSA-Q-learning

文章目录 实现SARSA算法和对应的强化学习智能体前期准备实现步骤工作原理初始化算法流程 构建基于Q学习的智能体前期准备实现步骤工作原理SARSA 算法的收敛性&#xff1a;SARSA 适合在线学习和真实系统&#xff1a;Q 学习算法的适用性&#xff1a; 实现SARSA算法和对应的强化学…

linux|多线程(一)

主要介绍了为什么要有线程 和线程的调用 和简单的对线程进行封装。 背景知识 a.重谈地址空间 我们知道物理内存的最小单元大小是4kB 物理内存是4G那么这样的单元友1M个 操作系统先描述再组织struct page[1M] 对于32位数据字长的机器&#xff0c;页表有2^32条也就是4G条&#…

随笔一、泰山派RK3566开发板调试串口波特率修改

摘要&#xff1a;立创泰山派RK3566开发板默认调试串口波特率是1500000bps&#xff0c;一般串口助手工具没有此波特率&#xff0c;为适应各种调试环境需要&#xff0c;打算修改调试串口波特率为115200bps 需要修改三个部分 1. uboot引导部分 修改tspi_linux_sdk/u-boot/config…

python数据可视化(10)——绘制地图图表

课程学习来源&#xff1a;b站up&#xff1a;【蚂蚁学python】 【课程链接&#xff1a;【【数据可视化】Python数据图表可视化入门到实战】】 【课程资料链接&#xff1a;【链接】】 python&#xff1a;3.12.3 所有库都使用最新版。 Python绘制中国地图和城市图表 from pyech…

CSS技巧专栏:一日一例 7 - 纯CSS实现炫光边框按钮特效

CSS技巧专栏&#xff1a;一日一例 7 - 纯CSS实现炫光边框按钮特效 本例效果图 案例分析 相信你可能已经在网络见过类似这样的流光的按钮&#xff0c;在羡慕别人做的按钮这么酷的时候&#xff0c;你有没有扒一下它的源代码的冲动&#xff1f;或者你当时有点冲动&#xff0c;却…