Java算法
机灵小白
菜鸟很奋斗,专攻前端框架,后端Spring,以及初学大数据Phython
展开
-
Java算法总结(8)_基数排序
前几篇中介绍了7种基于比较的排序方法,其中堆排序、快速排序、归并排序实现了时间复杂度为O(NlogN)数级,甚至有关数据结构与算法的书籍中证明了凡是基于计较的排序方法时间复杂度至少为O(NlogN),而我们接下来要要介绍的非比较排序,它可以实现O(N)的时间复杂度——基数排序;原理 采用“分配”+“收集”的思想,按最高位优先法(MSD)或最低位优先法(LSD),将数组中的元素分配到对应的桶中,然后再将桶中的元素收集给数组;算法分析1、时间复杂度O(N);2、空间复杂度O(N);3、稳定排序原创 2020-08-09 17:51:07 · 104 阅读 · 0 评论 -
Java算法总结(7)_归并排序
文章目录归并排序算法分析归并图解Java实现算法测试 上篇介绍了交换排序,了解到快速排序采用了“分治策略”+“递归”思想,那么接下来要介绍的比较排序算法,也是基于同样的思想,那就是归并排序。归并排序 基于分治策略,通过递归将序列分成若干的子序列,待归并操作后,使得所有子序列有序,最后两路归并得到最终的有序序列;算法分析1、时间复杂度:O(NlogN);2、空间复杂度:O(N),需要创建长度相等的临时数组tempArr;3、稳定排序归并图解 子序列A={3,5,6},B={1,2,原创 2020-07-26 15:56:34 · 130 阅读 · 0 评论 -
Java算法总结(6)交换排序
1、交换排序 上篇介绍了选择排序,那么接下来给大家介绍比较排序中的交换排序,“交换”顾名思义就是两两比较后,当满足某种条件时,互换位置;该排序包括冒泡排序和快速排序。2、冒泡排序 冒泡排序是一种相对简单的比较排序方法,通过相邻元素两两比较,当满足某种比较条件时,交换彼此位置,它的整个运行过程类似水中气泡从下往上,逐渐变大的过程,所以叫冒泡排序。2.1 算法分析1、 算法时间复杂度:O(N*2);2、 算法空间复杂度:O(1);3、 稳定排序;2.2 算法步骤:1、 从无序列表中比较2原创 2020-07-19 20:00:04 · 584 阅读 · 1 评论 -
Java算法总结(5)_选择排序
文章目录1、选择排序2、简单选择排序2.1 原理2.2 算法分析2.3 步骤描述2.4 简单选择排序Java代码3、堆排序3.1 原理3.2 堆性质3.3 算法分析3.4 步骤描述3.5 堆排序Java代码4、选择算法测试1、选择排序 在上一篇中初探比较排序,向大家介绍了插值排序,使得大家对比较排序有个大体的了解,那么在接下来的该篇中将为大家介绍选择排序的思想,当然从字面上可以简单的理解,“选择”必然是要在可选范围内,比较出最优值,就好比生活中我们去瓜棚里挑最大的西瓜一样,首先我们会挑相对较大的西瓜原创 2020-07-05 15:48:51 · 359 阅读 · 0 评论 -
Java算法总结(4)_插值排序
文章目录1、常用的比较排序2、直接插入排序2.1 原理2.2 算法分析2.3 动态图解2.4 直接插入Java代码3 希尔排序3.1 原理3.2 算法分析3.3 动态图解3.4 希尔排序Java代码4 算法测试1、常用的比较排序 本章作为排序算法的初篇,首先给大家介绍插入类排序,它包括:直接插入排序、二分插入排序、希尔排序。由于个人觉得二分插入排序的选址作用性不大,所以就不对它进行阐述。2、直接插入排序2.1 原理 从左往右依次不明显地交换元素,在每次移动元素时都保证元素前已处于排序过的状原创 2020-06-25 18:14:43 · 568 阅读 · 0 评论 -
Java算法总结(3)_斐波那契查找法
1、原理 类似于二分法查找,它们的不同之处在于,斐波那契查找将查找点的对半选择改进为黄金分割点选择,所以又叫做黄金比例查找法;其中 searchVal代表需要查找的值,fid是斐波那契数列;2、基础知识2.1 斐波那契数列1,1,2,3,5,8,13,21…F(n-1),F(n),其一般表达式为F(n)=F(n-1)+F(n-2),其中F(1)=1,F(2)=1,中文解释即一个数字等于它前面两项之和;2.2 黄金分割证明:当n趋近无穷大时,F(N-1)/F(N)=0.618(黄金分割点)原创 2020-06-20 17:36:25 · 290 阅读 · 0 评论 -
Java算法总结(2)_插值查寻法
文章目录1、插值原理2、 插值法特点3、图解3.1、图分析4、实例代码测试4.1、线性分析4.2非线性分析5、总结1、插值原理在上一章中介绍了二分法查找,可以知道二分法是通过对半选择查找位置mid,然而在现实生活中,对于排序均匀有规律的列表,比如字典、电话簿,在查找姓氏“张”的时候,我们都会下意识的从末尾几页开始查找,而不是像二分法那样从中间入手,同理,插值查寻法也是将查找位置mid的对半选择改进为自适应选择(相似三角形定理),从而提高了查找效率;其中:mid:查找位置;low:列表的下界值;原创 2020-06-11 20:26:59 · 424 阅读 · 0 评论 -
Java算法总结(1)_二分查寻法
最近脑壳发热,想着把算法这块盲区捋一遍,那么既然有想法,我们就一起学习吧,当然万事开头难,我们应该从简入深,坚持坚持再坚持!算法是什么? 一种能在有限步骤内求解某一问题所使用的明确规则就叫算法,简单地说就是解决问题的步骤能够在有限步内收敛,最终停止并得出有效解。算法的特征有穷性:算法要保证在有限步内结束;确切性:算法的每一步必须要有明确的定义;输入:算法有0个或多个输入,用于对算法初始化;输出:算法有1个或多个输出,用于反映输入数据加工后的结果,没有输出的算法是毫无意义的;可行性:算原创 2020-06-04 22:31:46 · 150 阅读 · 0 评论