数据结构与算法
主要是一些基础的数据结构与算法的学习
Memorys.Liu
it's bad but not too bad.
展开
-
堆排序
原文:https://time.geekbang.org/column/article/69913 原文是极客时间,的数据结构与算法课程。整片文章感觉有抄袭的嫌疑,哈哈哈,不过感觉这个图的确是比文字或者别的更形象和有说服力。1.堆的定义:堆满足的两个必要条件:堆是一个完全二叉树。 堆中的每个节点的值都必须大于等于(或者小于等于)其子树的每个节点的值。对于每个节点的值都...原创 2019-06-14 20:43:32 · 243 阅读 · 0 评论 -
快速排序
快速排序:时间复杂度:时间复杂度主要取决于每次拆分的时间。是n*log(n)空间复杂度:在合并的时候,没有使用额外的存储空间,所以时间复杂度是O(1)原地排序算法:是原地排序算法。稳定排序算法:在排序的时候,前后大小相等的元素,不能保证排序后的顺序一致。如果从前往后排,则比中间值大的元素不能确保顺序一致,如果从后往前排,则比中间值小的元素不能确保顺序。时间复杂度计...原创 2019-06-10 20:21:11 · 123 阅读 · 0 评论 -
归并排序
归并排序:时间复杂度:时间复杂度主要取决于合并的时间。是n*log(n)空间复杂度:在合并的时候,使用了额外的数组存储排序结果,所以空间复杂度不是O(1)原地排序算法:不是原地排序算法。稳定排序算法:在排序的时候,前后大小相等的元素,先排前边数组的元素,就可以保证排序的稳定性。时间复杂度推导方法:T(n) = 2*T(n/2) + n = 4*T(n/4) + ...原创 2019-06-08 17:27:28 · 100 阅读 · 0 评论 -
希尔排序
希尔排序:时间复杂度:O(n^(1.3—2))空间复杂度:O(1),原地排序算法稳定性:不是稳定的排序算法。相关介绍感觉百度百科介绍挺好的。见:https://baike.baidu.com/item/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F/3229428?fr=aladdinpackage cm.com.algorithm;/*...原创 2019-06-06 14:03:52 · 147 阅读 · 0 评论 -
选择排序
选择排序:时间复杂度:因为需要两次循环,每一次循环的复杂度都为n,所以总的时间负责度为O(n^2)空间复杂度:没有使用额外的空间,所以空间复杂度为O(1)原地排序算法:因为空间复杂度为O(1),没有占用额外的空间来排序,所以是原地排序算法。稳定排序算法:5,8,5,2,5,9 这样的就会乱序。所以是非稳定排序算法。因为不能保证相等元素的排序顺序和原来保持一致。pac...原创 2019-06-05 21:39:14 · 120 阅读 · 0 评论 -
插入排序
插入排序:时间复杂度:因为需要两次循环,每一次循环的复杂度都为n,所以总的时间负责度为O(n^2)空间复杂度:没有使用额外的空间,所以空间复杂度为O(1)原地排序算法:因为空间复杂度为O(1),没有占用额外的空间来排序,所以是原地排序算法。稳定排序算法:在排序的时候,如果遇到前后相等的元素就不互换位置,就可以做到顺序不改变,所以是稳定排序算法。package cm.co...原创 2019-06-05 21:23:44 · 109 阅读 · 0 评论 -
冒泡排序
冒泡排序:时间复杂度:因为需要两次循环,每一次循环的复杂度都为n,所以总的时间负责度为O(n^2)空间复杂度:没有使用额外的空间,所以空间复杂度为O(1)原地排序算法:因为空间复杂度为O(1),没有占用额外的空间来排序,所以是原地排序算法。稳定排序算法:在排序的时候,如果遇到前后相等的元素就不互换位置,就可以做到顺序不改变,所以是稳定排序算法。package cm.co...原创 2019-06-05 17:58:51 · 108 阅读 · 0 评论 -
背包问题-动态规划
背包问题描述:将有限的几个物品放入一个能承受固定重量的背包中,求能背包中物品的最大重量package cm.com.algorithm.knapsack;import cm.com.algorithm.knapsack.compare.SortCompare;import java.util.Arrays;/** * 背包问题-动态规划实现 * * 核心思想...原创 2019-07-03 11:47:36 · 127 阅读 · 0 评论 -
背包问题-贪心算法
背包问题描述:将有限的几个物品放入一个能承受固定重量的背包中,求能背包中物品的最大重量package cm.com.algorithm.knapsack;import cm.com.algorithm.knapsack.compare.SortCompare;import java.util.ArrayList;import java.util.Arrays;impo...原创 2019-07-03 11:44:30 · 659 阅读 · 0 评论 -
算法的时间复杂度分类
1.算法的时间复杂度主要有以下几种1.1 0(1)指的是常数时间内的算法。例如: int i = 8; int j = 6; int sum = i + j;执行一次或者常数时间次数的代码,时间复杂度都是0(1)1.2 0(log n) 0(n log n)示例代码: i=1; while (i <= n) { i = i * 2; }上述代码的时间...原创 2019-05-29 14:40:43 · 4012 阅读 · 0 评论 -
单链表 反转
package cm.com.datastructure.linkedlist;/** * 实现单链表 翻转 * * @author MemorysLiu * @version 1.0.0 * @date 2019-07-31 15:14 */public class SinglyLinkedList { public static void main(String[...原创 2019-07-31 15:32:06 · 148 阅读 · 0 评论 -
实现一个支持动态扩容的集合
package cm.com.datastructure.array;/** * 支持动态扩容的数组 * 初始容量为8 每次扩容2倍 * * @author MemorysLiu * @version 1.0.0 * @date 2019-07-29 18:53 */public final class Array<T> { private static...原创 2019-07-29 19:26:47 · 2059 阅读 · 0 评论 -
后序遍历二叉树
package cm.com.algorithm.tree;/** * 后序遍历2叉树 * 后序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它的右子树,最后打印它本身 * * @author [email protected] * @date 2019-06-11 22:14 */public class LRDTree { private s...原创 2019-06-17 12:15:57 · 573 阅读 · 0 评论 -
中序遍历二叉树
package cm.com.algorithm.tree;/** * 中序遍历2叉树 * 中序遍历是指,对于树中的任意节点来说,先打印它的左子树,然后再打印它本身,最后打印它的右子树 * * @author [email protected] * @date 2019-06-11 22:14 */public class LDRTree { private s...原创 2019-06-17 12:14:21 · 4528 阅读 · 0 评论 -
前序遍历二叉树
package cm.com.algorithm.tree;/** * 前序遍历2叉树 * 前序遍历是指,对于树中的任意节点来说,先打印这个节点,然后再打印它的左子树,最后打印它的右子树 * * @author [email protected] * @date 2019-06-11 22:14 */public class DLRTree { private ...原创 2019-06-17 12:12:35 · 214 阅读 · 0 评论