JavaSE-数组的算法
数组的算法
在Java中,数组是一种基本的数据结构,常用于实现各种算法。以下是一些常见的与数组相关的算法:
排序算法:
- 冒泡排序(Bubble Sort)
- 选择排序(Selection Sort)
- 插入排序(Insertion Sort)
- 快速排序(Quick Sort)
- 归并排序(Merge Sort)
- 堆排序(Heap Sort)
搜索算法:
- 线性搜索(Linear Search)
- 二分搜索(Binary Search)- 需要数组是有序的
数学算法:
- 找到最大/最小元素
- 求和、平均数
- 标准差、方差等统计计算
动态编程算法:
- 矩阵链乘问题
- 背包问题
- 最长公共子序列
字符串处理算法:
- 字符串匹配算法(如KMP算法)
- 排序字符串数组
数组变换算法:
- 反转数组
- 旋转数组
- 数组元素的循环移位
查找重复元素:
- 使用哈希表或排序后查找
集合操作:
- 并集、交集、差集
图算法中的数组应用:
- 邻接矩阵表示图
- 深度优先搜索(DFS)和广度优先搜索(BFS)中的访问标记数组
特殊问题算法:
- 荷兰国旗问题(对数组进行三向切分)
- 找出数组中的第k大(小)元素
示例:冒泡排序
以下是一个简单的冒泡排序算法的Java实现:
void bubbleSort(int[] arr) {
int n = arr.length;
//两个for循环,外层循环用来遍历数组'i-1',内层循环用来将已经排好序的变量减去'j-i-1'
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
// 交换 arr[j] 和 arr[j + 1]
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
示例:二分搜索
二分搜索要求数组是预先排序的:
int binarySearch(int[] arr, int x) {
int l = 0, r = arr.length - 1;
while (l <= r) {
int m = l + (r - l) / 2;
// 检查x是否位于中点
if (arr[m] == x) {
return m;
}
// 如果x大于中点元素,则在右侧查找
if (arr[m] < x) {
l = m + 1;
}
// 如果x小于中点元素,则在左侧查找
else {
r = m - 1;
}
}
return -1; // x不存在于数组中
}
数组算法是计算机科学和编程中的核心内容,掌握这些算法对于解决各种编程问题至关重要。Java标准库也提供了一些内置的数组操作,例如 Arrays.sort() 和 Arrays.binarySearch(),它们在很多情况下可以简化编程任务。
JavaSE-数组的算法的更多相关文章
- 在Eclipse中使用Junit进行单元测试练习 实现最大子数组和算法
1.如何在MAC OS X下安装配置java开发工具 http://www.cnblogs.com/coderL/p/5939541.html 2.最大子数组和算法 附上程序运行及测试截图,源码见后 ...
- javascript数组去重算法-----3
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----2
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----1
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----5
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----4(另一种写法__2)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----4(另一种写法)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- javascript数组去重算法-----4
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 那些有关求解next数组的算法
next数组的历史 有关字符串的模式匹配算法中,比较容易写出的是朴素的匹配算法也就是一种暴力求解方式,但是由于其时间复杂度为子串长度和主串长度的乘积,例如strlen(subStr) = n,strl ...
- php实现构建乘积数组(算法:替换)(语法错误:分号和$符号)
php实现构建乘积数组(算法:替换)(语法错误:分号和$符号) 一.总结 1.算法:替换 2.语法错误:分号和$符号 二.php实现构建乘积数组 题目描述: 给定一个数组A[0,1,...,n-1], ...
随机推荐
- Disruptor—3.核心源码实现分析
大纲 1.Disruptor的生产者源码分析 2.Disruptor的消费者源码分析 3.Disruptor的WaitStrategy等待策略分析 4.Disruptor的高性能原因 5.Disrup ...
- 【拥抱鸿蒙】基于 Cocos Creator 的 HarmonyOS 自动构建
概述 随着 Cocos Creator 新版本的发布,开发者们迎来了一个令人振奋的消息:Cocos Creator 现已支持发布到 HarmonyOS 平台.这为游戏开发者和应用开发者开辟了新的天地, ...
- 循环神经网络(RNN)模型
一.概述 循环神经网络(Recurrent Neural Network, RNN)是一种专门设计用于处理序列数据(如文本.语音.时间序列等)的神经网络模型.其核心思想是通过引入时间上的循环连接, ...
- 布局控件:Grid和StackPanel
布局控件:Grid和StackPanel 本文同时为b站WPF课程的笔记,相关示例代码 一个窗口顶上的部分叫做非客户区,下面的部分叫做客户区域.非客户区域主要就是一个Title和三个窗口样式按钮.我们 ...
- Springboot笔记<14>指标监控
指标监控 未来每一个微服务在运算部署以后,我们都需要对其进行监控.追踪.审计和控制等等.Springboot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控.审计等功 ...
- 告别手动码字!AI智能生成+文档下载,职场/学习效率翻倍攻略!
一.写在前面 本文重点介绍如何将AI智能生成文字直接转换为word文档,支持下载,最终提升大家学习和职场办公的效率. 二.实操环境 1.Pandoc-api服务: 下载地址:https://githu ...
- Controller接收前端参数
四个常用的Mapping @PutMapping: 和PostMapping作用等同,都是用来向服务器提交信息.如果是添加信息,倾向于用@PostMapping,如果是更新信息,倾向于用@PutMap ...
- 好用的文档工具👉smart-doc
好用的文档工具smart-doc smart-doc不得不说是一款非常好用的文档工具,尤其是它几乎不与项目耦合的特性十分值得所有java开发人员日常使用它~ 之前及现在用的 我从事开发以来,用过形形色 ...
- WPF 不能识别的图标代码
https://blog.csdn.net/YouyoMei/article/details/86702178?utm_medium=distribute.pc_relevant.none-task- ...
- 记录java使用openoffice将office转pdf遇到的问题
openoffice使用方法:使用openOffice将office文件转成pdf 遇到了这个问题: 将 DocumentConverter converter = new OpenOfficeDoc ...