算法
文章平均质量分 91
酒剑随马@
努力变强
展开
-
稳定排序与不稳定排序
快速排序、希尔排序、选择排序、堆排序不是稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj, Ai原来在Aj位置前,排序后Ai还是要在Aj位置前。...原创 2017-09-20 14:32:10 · 747 阅读 · 0 评论 -
快速排序
快速排序的时间复杂度为O(nlogn)基本思想是:(1)先取一个基准值temp(一般是数组第一个数) (2)与数组中其他数值进行比较,比temp大的放在基准值的右边,小于等于它的放在左边,此时temp已经在它排序后的正确位置 (3)在左右俩部分依次进行(2)中的操作,直到每一部分都只剩一个数字原创 2017-09-12 17:01:11 · 189 阅读 · 0 评论 -
归并排序
归并排序的时间复杂度为O(nlogn)它采用的是分治法的思想,先将序列拆分为1个个子序列,直到每个序列的长度为1,此时每个序列都是有序的;然后将两个有序的子序列合并成为一个更大的子序列,递归此过程,直到子序列的长度和原序列相同,此时排序完成,图示如下:具体代码如下:import java.util.Arrays;/** * Created by 亮大王 on 2017/8/3原创 2017-09-12 18:46:54 · 176 阅读 · 0 评论 -
堆排序
堆排序可归纳为两个操作:(1)根据初始数组去构造初始堆(构建一个完全二叉树,保证所有的父结点都比它的孩子结点数值大)。(2)每次交换第一个和最后一个元素,输出最后一个元素(最大值),然后把剩下元素重新调整为大根堆。当输出完最后一个元素后,这个数组已经是按照从小到大的顺序排列了。先通过详细的实例图来看一下,如何构建初始堆。设有一个无序序列{ 1, 3, 4, 5, 2, 6,...原创 2017-09-21 16:48:35 · 239 阅读 · 0 评论 -
二叉树的一些基础知识及创建、遍历
红黑树:是一种平衡二叉查找树,具有以下性质(1)节点拥有颜色,不是黑色就是红色(2)根节点是黑色的(3)叶子节点也是黑色的(叶子结点null节点)(4)每个红色节点的两个子节点都是黑色的,即从叶子到根不存在两个连续的节点都是红色的(5)从任一节点到单个叶子节点的任意简单路径所包含的黑色节点的数目是一样的二叉排序树/二叉查找树或者是一棵空树,或者是具有...原创 2017-09-18 14:52:03 · 502 阅读 · 0 评论 -
最长公共子串和最长公共子序列
1. 问题描述子串为连续的几个字母如lo,至于什么是子序列,这里给出一个例子:有两个母串cnblogsbelong比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与母串保持一致,我们将其称为公共子序列。最长公共子序列(Longest Common Subsequence,LCS),顾名思义,是指在所有的子序列中最长的那一个。子串是要求更严格的原创 2017-11-06 14:14:44 · 188 阅读 · 0 评论 -
0 1背包问题
01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为C1,C2,…,Cn,与之相对应的价值为W1,W2,…,Wn.求解将那些物品装入背包可使总价值最大。 动态规划(DP): 1) 子问题定义:F[i][j]表示前i件物品中选取若干件物品放入剩余空间为j的背包中所能得到的最大价值。 2) 根据第i件物品放或不放进行决策原创 2017-11-06 16:52:33 · 296 阅读 · 0 评论