数据结构与算法
微滑低
再见少年拉满弓,不惧岁月不惧风!
展开
-
Java实现选择排序及分析其复杂度
Java实现选择排序及分析其复杂度1.需求:排序前:{4,6,8,7,9,2,10,1}排序后:{1,2,4,5,7,8,9,10}2.排序原理:1.每一次遍历的过程中,都假定第一个索引处的元素是最小值,和其他索引处的值依次进行比较,如果当前索引处的值大于其他某个索引处的值,则假定其他某个索引出的值为最小值,最后可以找到最小值所在的索引2.交换第一个索引处和最小值所在的索引处的值图解:3.选择排序API设计:4.代码实现:public class Selection { /原创 2021-03-11 10:53:53 · 162 阅读 · 0 评论 -
Java实现冒泡排序并分析其复杂度
Java实现冒泡排序并分析其复杂度1.需求:排序前:{4,5,6,3,2,1} 排序后:{1,2,3,4,5,6}2.排序原理:1. 比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。2. 对每一对相邻元素做同样的工作,从开始第一对元素到结尾的最后一对元素。最终 最后位置的元素就是最大值图解:3.冒泡排序API设计:4.代码实现//排序代码 public class Bubble { /* 对数组a中的元素进行排序 */ public原创 2021-03-10 23:07:55 · 277 阅读 · 0 评论 -
Java求逆波兰表达式的结果(栈)
Java求逆波兰表达式的结果(栈)什么是逆波兰表达式?逆波兰表达式求值问题是我们计算机中经常遇到的一类问题,要研究明白这个问题,首先我们得搞清楚什么是逆波兰表达式?要搞清楚逆波兰表达式,我们得从中缀表达式说起。中缀表达式: 中缀表达式就是我们平常生活中使用的表达式,例如:1+3*2,2-(1+3)等等,中缀表达式的特点是:二元运算符总是置于两个操作数中间。中缀表达式是人们最喜欢的表达式方式,因为简单,易懂。但是对于计算机来说就不是这样了,因为中缀表达式的运算顺序不具有规律性。不同的运算符具原创 2021-03-07 17:38:47 · 168 阅读 · 1 评论 -
Java解决约瑟夫问题(单向循环链表)
Java解决约瑟夫问题问题描述: 传说有这样一个故事,在罗马人占领乔塔帕特后,39 个犹太人与约瑟夫及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,第一个人从1开始报数,依次往后,如果有人报数到3,那么这个人就必须自杀,然后再由他的下一个人重新从1开始报数,直到所有人都自杀身亡为止。然而约瑟夫和他的朋友并不想遵从。于是,约瑟夫要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,从而逃过了这场死亡游戏 。问题转换:原创 2021-03-07 17:30:03 · 230 阅读 · 1 评论 -
常见时间复杂度总结
常见时间复杂度总结1.什么是算法时间复杂度分析?分为两种情况:事后分析估算方法、事前分析估算方法事后分析估算方法:比较容易想到的方法就是我们把算法执行若干次,然后拿个计时器在旁边计时,这种事后统计的方法看上去的确不错,并且也并非要我们真的拿个计算器在旁边计算,因为计算机都提供了计时的功能。这种统计方法主要是通过设计好的测试程序和测试数据,利用计算机计时器对不同的算法编制的程序的运行时间进行比较,从而确定算法效率的高低,但是这种方法有很大的缺陷:必须依据算法实现编制好的测试程序,通常要花费大量原创 2021-03-05 16:33:46 · 983 阅读 · 0 评论