Java常用算法原理剖析

简介: 用Java实现的所有算法(用于教育)这些只是为了演示的目的。在Java标准库中有许多不同类型的实现,由于性能原因这些要好得多。

用Java实现的所有算法(用于教育)

这些只是为了演示的目的。在Java标准库中有许多不同类型的实现,由于性能原因这些要好得多。

排序算法

气泡

Java常用算法原理剖析

从维基百科气泡排序,叫做下沉排序,是一种简单的排序算法,反复遍历要排序的列表,比较每一对相邻的项目,并在排序错误的情况下交换。遍历列表将被重复,直到不需要交换,这表明列表已被排序。

特性

  • 最差情况下的性能O(n^2)
  • 最佳案例表现O(N)
  • 平均病例性能O(n^2)

查看算法行动

插入

Java常用算法原理剖析

从维基百科插入排序是一种简单的排序算法,每次构建最终排序数组(或列表)。在大型列表中,效率要比更高级的算法(如快速排序、堆排序或合并排序)低得多。

特性

  • 最差情况下的性能O(n^2)
  • 最佳案例表现O(N)
  • 平均病例性能O(n^2)

查看算法行动

合并

Java常用算法原理剖析

合并排序(通常也是拼写合并)是一种高效的、通用的、基于比较排序算法。大多数实现都会产生稳定的排序,实现在排序的输出中保留相同元素的输入顺序。Mergesort是由JohnvonNeumann于1945年发明的分而治之的算法。

特性

  • 最坏的情况性能O(N Log N)(典型)
  • 最佳情况性能O(N Log N)
  • 平均情况性能O(N Log N)

查看算法行动

速战速决

Java常用算法原理剖析

从维基百科快速排序(有时称为分区-交换排序)是一种有效的排序算法,是一种系统的方法,用于排列数组的元素。

特性

  • 最差情况下的性能O(n^2)
  • 最佳情况下O(N Log N)或O(N)具有三向分区
  • 平均病例性能O(n^2)

查看算法行动

选择

Java常用算法原理剖析

将输入列表分为两个部分:已经排序项的子列表(在列表的前面(左)从左到右建立)和占据列表其余部分的待排序项的子列表。最开始排序子列表是空的,未排序子列表是整个输入列表。该算法通过查找未排序子列表中最小的(或最大的,取决于排序顺序)元素,将其与最左边的未排序元素交换(按排序顺序排列),并将子列表边界向右移动。

特性

  • 最差情况下的性能O(n^2)
  • 最佳案例性能O(n^2)
  • 平均病例性能O(n^2)

查看算法行动

Java常用算法原理剖析

ShellSort是插入排序的一种推广,允许交换相距很远的项。思路是安排元素列表,以便从任何地方开始,考虑到每个第n个元素都会给出一个排序列表。这样的列表叫做h排序。等效地,可以被认为是h交错列表,每个元素都是单独排序的。

特性

  • 最坏的性能O(Nlog 2 2n)
  • 最佳情况性能O(N Log N)
  • 平均病例性能取决于间隙序列

查看算法行动

时间紧图

比较排序算法(气泡排序、插入排序、选择排序)的复杂性

复杂性图


搜索算法

线性

Java常用算法原理剖析

线性搜索或顺序搜索是在列表中查找目标值的一种方法。会依次检查列表中的每个元素的目标值,直到找到匹配或搜索所有元素为止。线性搜索在最坏的线性时间运行,最多进行n个比较,其中n是列表的长度。

特性

  • 最坏的性能O(N)
  • 最佳案例表现O(1)
  • 平均个案表现O(N)
  • 最坏情况下空间复杂度O(1)迭代

二进制

Java常用算法原理剖析

此算法也叫半间隔搜索或对数搜索算法,查找目标值在排序数组中的位置。将目标值与数组的中间元素进行比较;如果不相等,则消除目标数组的一半,并在其余的一半上继续搜索,直到成功为止。

特性

  • 最坏的性能O(Log N)
  • 最佳案例表现O(1)
  • 平均案例性能O(Log N)
  • 最坏情况空间复杂度O(1)

ShellSort是插入排序的一种推广,允许交换相距很远的项。思路是安排元素列表,便于任何地方开始,考虑到每个第n个元素都会给出一个排序列表。这样的列表叫做h排序。等效地,可以被认为是h交错列表,每个元素都是单独排序的。

特性

  • 最坏的性能O(Nlog 2 2n)
  • 最佳情况性能O(N Log N)
  • 平均病例性能取决于间隙序列

查看算法行动


与其他算法的链接

转换 动态规划 密码 杂类
任何基地到任何基地 硬币兑换 凯撒沙拉 堆排序
任何基到十进制 蛋滴 柱状转位密码 回文素校验器
二进制到十进制 斐波纳契 RSA 很快.。
二进制到十六进制 Kadane算法 更多的很快就会到来.。  
二进制到八进制 背包    
十进制到任意基 最长公共子序列    
十进制到二进制 最长增长子序列    
十进制到十六进制 棒材切割    
还有更多.。 还有更多.。    

数据结构

列表 排队
BFS 空堆异常 圆链表 通用数组列表队列
外勤部 双链表 排队
堆元素 单链表  
Kruskals算法 最大堆    
矩阵图 民堆    
PrimMST      
堆叠
节点堆栈 AVL树
链表堆栈 二叉树
堆叠 还有更多.。
  • 缓冲器

  • HashMap

  • 矩阵

目录
相关文章
|
14天前
|
Java 调度
Java并发编程:深入理解线程池的原理与实践
【4月更文挑战第6天】本文将深入探讨Java并发编程中的重要概念——线程池。我们将从线程池的基本原理入手,逐步解析其工作过程,以及如何在实际开发中合理使用线程池以提高程序性能。同时,我们还将关注线程池的一些高级特性,如自定义线程工厂、拒绝策略等,以帮助读者更好地掌握线程池的使用技巧。
|
21天前
|
机器学习/深度学习 存储 算法
神经网络分类算法原理详解
神经网络分类算法原理详解
44 0
|
26天前
|
开发框架 Java API
java反射机制的原理与简单使用
java反射机制的原理与简单使用
17 1
|
9天前
|
机器学习/深度学习 自然语言处理 算法
|
21天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
60 0
|
23天前
|
存储 算法 Java
Java数据结构与算法-java数据结构与算法(二)
Java数据结构与算法-java数据结构与算法
66 1
|
23天前
|
Java
软件工程设计原理里氏替换原则 ,具体实现及JAVA代码举例
里氏替换原则(Liskov Substitution Principle, LSP)是面向对象设计的基本原则之一,由Barbara Liskov提出。这个原则指出,如果类 S 是类 T 的子类型,则程序中使用 T 的对象的地方都可以不经修改地使用 S 的对象。换句话说,子类的对象应该能够替换掉它们的父类对象,而不影响程序的正确性。这个原则强调了继承关系中的行为兼容性,保证了基类和派生类之间的正确抽象和继承关系。
23 3
|
9天前
|
运维 NoSQL 算法
Java开发-深入理解Redis Cluster的工作原理
综上所述,Redis Cluster通过数据分片、节点发现、主从复制、数据迁移、故障检测和客户端路由等机制,实现了一个分布式的、高可用的Redis解决方案。它允许数据分布在多个节点上,提供了自动故障转移和读写分离的功能,适用于需要大规模、高性能、高可用性的应用场景。
16 0
|
11天前
|
算法 安全 Java
java代码 实现AES_CMAC 算法测试
该代码实现了一个AES-CMAC算法的简单测试,使用Bouncy Castle作为安全提供者。静态变量K定义了固定密钥。`Aes_Cmac`函数接受密钥和消息,返回AES-CMAC生成的MAC值。在`main`方法中,程序对给定的消息进行AES-CMAC加密,然后模拟接收ECU的加密结果并进行比较。如果两者匹配,输出"验证成功",否则输出"验证失败"。辅助方法包括将字节转为16进制字符串和将16进制字符串转为字节。
|
17天前
|
Java 开发者
软件工程设计原理接口隔离原则 ,具体实现及JAVA代码举例
【4月更文挑战第7天】接口隔离原则(Interface Segregation Principle, ISP)是面向对象设计原则之一,旨在减少不必要的依赖关系,通过拆分庞大且臃肿的接口为更小、更具体的接口来实现。这个原则强调“客户端不应该被迫依赖于它不使用的接口”,意味着一个类不应该被迫实现它不使用的方法。
16 1