Java 数据结构 线性表

Java 数据结构 线性表

这两天在看CS61A的同时,一直在反复翻阅SICP with Python, 关于编程理念最基本的东西真是怎么看也看不够。 特别是递归里边,如何用N种硬币来表示一个数字的这类问题,总是创建不出来对应的抽象。普通的处理一批数据的递归倒还可以。 CS61A现在听完了Python的部分,进入了第三章解释器

Java 数据结构 双端队列和优先队列

Java 数据结构 双端队列和优先队列

双端队列就是同时可以在队列的头和尾, 都进行单个队列或者说和栈一样的操作. 双端队列被称为double-ended queue, 简称deque. 优先队列是指进入队列中的所有对象, 都有一个优先级, 出队的时候, 始终按照优先级较高的对象先出列的顺序进行处理. 可以想象, 双端队列其实我们已经实现

Java 数据结构 队列

Java 数据结构 队列

今天是春分, 小学入学的具体政策也出来了. 今年这个摇号还真是让人头大. 队列的思想这里就不赘述了, 其核心是先进先出, 像现实中的队伍一样, 从一侧添加数据, 从另外一侧取走数据. 队列的尾和头就和现实中的一样, 添加数据的一侧叫做尾(back), 取出数据的一侧叫做头(front). 队列的接口

Java 数据结构 排序 - 链表归并排序练习

Java 数据结构 排序 - 链表归并排序练习

这是一个小练习, 虽然是排序方面的练习, 但是做完之后发现其实是承上启下的一个练习.计算机这玩意, 每天必须得敲点代码, 本质上也是一门手工艺, 和钢琴一样得天天练. 练习的要求是实现链表元素的归并排序. 并不难, 不过小细节还很多,来看看 链表归并排序的思想 改造链表加入尾节点引用 add, re

Java 数据结构 排序 - 基数排序

Java 数据结构 排序 - 基数排序

来看一个并非可以通用的算法, 但是在排布一些特殊的内容上速度很快的算法, 基数排序. 基数排序的思想 桶 核心算法实现 排序总结 基数排序的思想 这个基数排序的思想, 我仔细想了想, 其实本质上非常简单, 因为我们很多时候排序, 都是按照要比较的元素, 从每个元素的左侧开始进行比较的. 比如数字,

Java 数据结构 排序 - 快速排序

Java 数据结构 排序 - 快速排序

昨天拆掉自行车的两个侧轮之后, 今天女儿就会骑车啦, 昨天陪她骑车的时候我提出来让她试试学会自己骑车, 没想到小家伙心态很开放, 要求拆掉, 然后整个下午摔了几次, 但是可以歪歪扭扭的骑很短一段. 结果今天就学会啦. 这个学习的速度看来比快排还要快一些. 快排和归并排序都采取了分治法策略, 所以时间

Java 数据结构 排序 - 归并排序

Java 数据结构 排序 - 归并排序

到目前看完了选择排序, 插入排序(希尔排序), 冒泡排序, 这些都是遍历加遍历, 复杂度都是n平方级别的, 希尔排序稍微好一些. 现在来看看更快的排序, 这些排序或多或少都采取了不断二分的分治法策略, 所以时间复杂度都要比之前平方级别的 来看看这些更快的方法, 首先是归并排序. 归并排序的思想 递归

Java 数据结构 排序 - 希尔排序

Java 数据结构 排序 - 希尔排序

希尔排序是改进的插入排序, 其思想来自于, 如果数组基本上已经有序, 插入排序的效率非常高, 可能只需要遍历数组很少的几次就搞定了. 来看看希尔排序的思路 希尔排序的思想 希尔排序方法编写 改进希尔排序 冒泡排序 希尔排序的思想 这些成熟的算法基本上都是50-60年代提出来的, 像希尔排序就是195

Java 数据结构 排序 - 插入排序 - 链表排序

Java 数据结构 排序 - 插入排序 - 链表排序

链表排序的最大问题是, 不能像数组那样简单的交换节点, 要操作一个节点, 很多时候需要知道这个节点之前的节点. 因此像选择排序这种直接通过索引交换位置的方法, 操作链表就变得非常麻烦. 但是插入排序就提供了一个崭新的思路. 插入排序的一大特点之前已经了解了, 就是某个元素的左侧是已经排序的, 右侧(

Java 数据结构 排序 - 插入排序

Java 数据结构 排序 - 插入排序

要看一个排序, 就得把思想记住, 思想记住了, 即使具体代码忘记了, 也可以很快写出来新的应用到工程中, 但要是思路忘记了, 那就等于全部忘光了. 插入排序的思路和核心方法 编写公有方法 递归版本的方法 插入排序的优缺点 递归实现寻找第二最小 插入排序的思路 插入排序的思路是, 对于数组的每一个元素