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

  • 矩阵

上一篇:Git:查看config配置文件


下一篇:成为Java高级程序员需要掌握哪些?