E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
《数据结构与算法分析》
拓扑排序简单笔记
不过顺便复习一下拓扑排序,看的是CLRS和
数据结构与算法分析
in C 拓扑排序是对有向无圈图的顶点的一种排序。
·
2015-10-31 13:31
排序
数据结构与算法分析
笔记-第二章
第二章 算法分析 2.1数学基础 讲的是函数的增长,显然比《算法导论》简洁得多。算法导论用了一章来讲的……我已经翻过算法导论了,所以只是复习一下。 以n^2为例,Ο定义的是最多也才n^2,Ω则是最少那么多。 如果是Θ则
·
2015-10-31 13:29
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第五章“堆”——二叉堆
2014.06.15 22:14 简介: 堆是一种非常实用的数据结构,其中以二叉堆最为常用。二叉堆可以看作一棵完全二叉树,每个节点的键值都大于(小于)其子节点,但左右孩子之间不需要有序。我们关心的通常只有堆顶的元素,而整个堆则被封装起来,保存在一个数组中。 图示: 下图是一个最大堆: 实现: 优先队列是STL中最常用的工具之一,许多算法的优化都要利用堆,使用的工具就
·
2015-10-31 11:12
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——Huffman编码
2014.07.06 16:47 简介: 给定一段有固定符号集合S构成的文本T,集合S中总共有n种符号。如果对于每种符号,使用一种不同的由‘0’和‘1’构成的位字符串来代替,比如: ‘a’->‘01’ ‘c’->'101' 'd'->‘11’ ... 例如,文本“acd”经过这种编码就变成了“0110111”。 这样,就
·
2015-10-31 11:12
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第九章“图论”——拓扑排序
2014.07.04 17:23 简介: 我们考虑一种特殊的图: 1. 有向图 2. 只有一个连通分量 3. 不存在环 那么这样的图里,必然可以找到一种排序方式,来确定谁在谁的“前面”。 简单的来说可以这么理解:如果存在一条边a->b,那么a顶点就在b的前面。 下面我们通过例子来看看拓扑排序的过程,确定所有的顶点中,谁排在谁的
·
2015-10-31 11:12
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第九章“图论”——最大流问题
2014.07.04 20:43 简介: 给定一个有向图,如果每一条边u->v代表一根水管,定义能从u流向v的最大水流量。那么选定起点s和终点t,如果让水从s流入,从t流出,最多能达到多少流量而不挤爆水管? 图示: Capacity是容量的意思,那么我们用C(u, v)来表示u->v这条边,也就是u流向v的最大流量。 下面是一张容量图: Ford-F
·
2015-10-31 11:12
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——跳表
2014.07.07 22:03 简介: 跳表(skip list)是一种随机化的有序数据结构。从形状上来看,长得比较像分层索引。能够在接近对数级别的时间内完成增、删、改、查操作。 你姑且可以认为这种数据结构的用途、用法都和平衡树很相似,但内部的实现原理则完全不同。 图示: 下面是一条有序的单链表: 如果你要查找某一个整数,必然需要O(n)级别的时间去搜索链表。
·
2015-10-31 11:12
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第八章“并查集”——并查集
2014.06.18 14:16 简介: “并查集”,英文名为“union-find set”,从名字就能看出来它支持合并与查找功能。另外还有一个名字叫“disjoint set”,中文名叫不相交集合。可能我们倾向于用最短的名字,所以就出现了“并查集”翻译为“disjoint set”的情况。并查集是一种树形结构,但与之前讲的树不同的是,这里的树节点只记录父节点,因此是一对一的,就可以用数
·
2015-10-31 11:12
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——Minimax策略
2014.07.08 20:53 简介: Minimax策略描述的是二人在轮流操作的博弈中,尽力使自己的利益最大化(Max),使对手利益最小化(Min)的一种策略。 这样的游戏有很多种,其中最典型的就是双人棋牌类游戏:中国象棋、五子棋、扑克牌等等。 这样的游戏的特点是: 1. 两人交替操作,一方先开始 2. 两人的操作互相独立,没有协作 游戏的种类实在
·
2015-10-31 11:12
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——Alpha-Beta剪枝
2014.07.08 22:43 简介: “搜索”与“剪枝”几乎是如影随形的。此处的“搜索”指的是带有回溯算法的深度优先搜索。 在之前的“Minimax策略”中我们给出了一个三连棋的程序,运行后你就知道计算一步棋要花多少时间。 为了计算最优的一步棋,我们可能需要递归9万多次。毫无疑问这种阶乘式的穷举过程必须通过剪枝来加速。 本篇介绍一种用于Minimax策略的剪枝思路——
·
2015-10-31 11:12
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第三章“线性表、栈和队列”——双向链表
2014.06.14 20:17 简介: 双向链表是LRU Cache中要用到的基本结构,每个链表节点左右分别指向上一个和下一个节点,能够自由地左右遍历。 图示: 实现: 1 // My implementation for doubly linked list. 2 struct ListNode { 3 int val; 4 Lis
·
2015-10-31 11:11
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第四章“树”——二叉搜索树
2014.06.14 23:27 简介: 二叉搜索树是学习二叉树之后,接触的第一个实用数据结构。特点是,左子树全部小于根,右子树全部大于根,元素不重复。一般能够支持对数级别的增删改查操作,但在二叉树发生倾斜的情况下,效率会下降至线性。下面给出插入、删除、查找的示意图。修改可以认为是先删除后插入。 图示: 实现: 1 // My i
·
2015-10-31 11:11
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第四章“树”——二叉树
2014.06.14 22:49 简介: 二叉树是学习树结构时接触的第一个概念,其他衍生的表示形式包括N叉树(随便多少叉)、二叉链表(土话也叫左孩子右兄弟)。由于单纯的二叉树是无序的,能做的事情不太多,我只实现了基本的结构体和序列化方法。 图示: 实现: 1 // My implementation for binary tree. 2 #include &l
·
2015-10-31 11:11
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第三章“线性表、栈和队列”——队列
2014.06.14 21:04 简介: 队列作为先进先出(FIFO)思想的代表,是最基础的数据结构之一,最典型的应用,就是广度优先搜索。实现方式可以用一条单链表或者两个栈,其中前者更为靠谱,原因请自行分析。 图示: 下图为单链表实现队列的思路。链表的头尾位置分别被记录,因此很容易实现尾进头出的操作。 另一种思路是用两个栈实现一个队列,主要思路就是颠来倒去,两个栈的先
·
2015-10-31 11:11
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第三章“线性表、栈和队列”——单向链表
2014.06.14 21:40 简介: 单向链表应该是绝大多数C语言初学者学会的第一个结构体了。每个节点会指向后续节点,属于顺序结构。由于单链表的实现简单,并且有着明显的限制,使其成为各种天才面试官们虐小朋友的利器(链表的功能实在很有限,而面试官总是要求你用链表完成各种各样的任务,难度就在这儿了)。因此,随手写链表肯定是参加面试的底线了,否则你都没机会动笔就可以回家等消息了。 图示:
·
2015-10-31 11:11
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第三章“线性表、栈和队列”——栈
2014.06.14 22:26 简介: 栈,是先进先出的结构。我们只关心栈的大小和栈顶的元素。 图示: 实现: 1 // My implementation of stack. 2 class Stack { 3 public: 4 Stack() { 5 m_capacity = 1; 6 m_size =
·
2015-10-31 11:11
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第四章“树”——AVL树
2014.06.15 16:22 简介: AVL树是一种高度平衡的二叉搜索树,其命名源自于联合发明算法的三位科学家的名字的首字母。此处“平衡”的定义是:任意节点的左右子树的高度相差不超过1。有了这个平衡的性质,使得AVL树的高度H总是接近log(N),因此各种增删改查的操作的复杂度能够保证在对数级别。没有bad case是AVL树与普通的二叉搜索树的最大区别。为了实现平衡性质,我们需要记录
·
2015-10-31 11:11
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第四章“树”——伸展树
2014.06.15 20:42 简介: 伸展树是一种介于普通二叉搜索树和AVL树之间的,比较平衡的一种二叉搜索树。它不像AVL树那样总是高度平衡,虽然单次操作的就可能耗费O(n)时间,但连续M次基本操作的时间复杂度能做到O(M * log(N)),M当然不能和1太接近。这种复杂度叫做均摊复杂度,英文叫amortiized complexity。当我学这门课的时候,这个概念我根本不理解,伸
·
2015-10-31 11:11
数据结构与算法
强联通分量:Kosarajus算法
算法的证明与理解如下,具体的网上/书上都有(摘自《
数据结构与算法分析
》) 由于V是X在Gr的深度优先搜索树中的一个后裔,因此存在Gr中一条从X到V的路径,从而存在G中中一条从V到X的路径。
·
2015-10-31 11:52
sar
(c#)
数据结构与算法分析
--栈与队列
栈stack 栈是一种先进后出机制,它只允许访问访问一个数据项,即 栈顶(最后插入的数据项)。它有主要的三种操作: push,向栈内压入值; pop,弹出栈顶的值,即返回栈顶的值,并把它从栈内删除; peek,只返回但不删除栈顶。 &nbs
·
2015-10-31 10:03
数据结构与算法
(c#)
数据结构与算法分析
--递归
递归 不知道有新手听没听过别人拿剥糖块来形容递归,诸如一层层地剥好比一层层地进入递归。这种比喻可是误导了我,只想着剥了,其实剥完皮儿,取出糖块,再把皮儿一层层地穿上才算个完整的递归。 递归就是自己调用自己的函数或方法了,一般情况,像我这样的
·
2015-10-31 10:03
数据结构与算法
(c#)
数据结构与算法分析
--数组、向量和表
数组 数组不用多解释了,都了解,这里再重复一些重要的。 随机这个词经常出现,在刚学的时候,都说数组在内存中是随机访问的,然而随机数又是随机(不确定)的,这两个概念总是搞不清楚。这里的随机访问与随机存储器的概念一样,google了也百度了,就是搞不到这个随机是什么意思,就只能按ran
·
2015-10-31 10:03
数据结构与算法
数据结构与算法分析
3.7 - 多项式乘法链表实现
思路: <1>对于p(x)中的每一个因式,与q(x)中每一个因式相乘的结果,保存于另外的链表中; <2>对于保存结果的链表排序,并去重,即去除系数相同的因式结点,但系数相加 代码: #include <list> using
·
2015-10-30 16:23
数据结构与算法
数据结构与算法分析
3.4&3.5 — 链表的交与并算法
代码: #include <list> template<typename ElementType> list<ElementType> Intersect(const list<ElementType> &list_1, const list<ElementType> &list_2)
·
2015-10-30 16:23
数据结构与算法
2.7 洗牌算法
出自
数据结构与算法分析
--C语言描述 习题2.7 在有个函数int rand(int n)返回1-n之间的随机数。如何把数组A[N]打乱?
·
2015-10-30 14:32
算法
关于二叉堆(优先队列)的其他操作及其应用
【0】README0.1)本文总结于
数据结构与算法分析
;源代码均为原创,旨在了解到我们学习了优先队列后,还能干些什么东西出来,增加学习的interest;0.2)以下列出了关于二叉堆(优先队列)的其他有用的操作
PacosonSWJTU
·
2015-10-29 22:00
数据结构
二叉堆应用
关于二叉堆(优先队列)的其他操作及其应用
【0】README0.1)本文总结于
数据结构与算法分析
;源代码均为原创,旨在了解到我们学习了优先队列后,还能干些什么东西出来,增加学习的interest;0.2)以下列出了关于二叉堆(优先队列)的其他有用的操作
PacosonSWJTU
·
2015-10-29 22:00
数据结构
二叉堆应用
二叉堆(优先队列)
【0】README0.1)本文总结于
数据结构与算法分析
,但源代码均为原创;旨在理清二叉堆(优先队列)+堆的其他操作及其应用,以便让朋友些知道为什么要学习优先队列;【1】二叉堆1.0)优先队列定义:优先队列是允许至少下列两种操作的数据结构
PacosonSWJTU
·
2015-10-29 22:00
数据结构
优先队列
二叉堆
散列之再散列
【0】README0.1)本文描述总结于
数据结构与算法分析
,但源代码为原创;0.2)为什么写这篇博文?
PacosonSWJTU
·
2015-10-27 22:00
数据结构
再散列
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——矩阵连乘问题
2014.07.07 15:47 简介: 给定N个矩阵,A1、A2、...、An,如果相邻矩阵的维度都满足相乘条件,如何组织这n-1次乘法的顺序,使得总共的乘法次数最少? 描述: 根据矩阵乘法的定义,如果矩阵X的维度是aXb,矩阵Y的维度是bXc。那么XY相乘需要的乘法次数是aXbXc。 这道题目是典型的动态规划问题。从使用者的角度来看,动态规划问题通常的应用情景主要有两个特
·
2015-10-27 14:06
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——拿石头游戏
2014.07.08 00:08 简介: 本章里没有讲到这个内容,是我在看书的时候回忆起了自己被问过的一道面试题。当时觉得特别难,现在回想起来才知道是自己无知。 如果有50颗石子,两人轮流拿。每次可以从其中拿走1,2,4或者8颗。谁拿走了最后一颗,谁就输了(输或者赢根本无所谓)。 请问,先手或者后手有什么必胜策略吗? 描述: 如果你是参加过ACM训练的人,肯定觉得小儿科
·
2015-10-27 14:06
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——质数检验
2014.07.07 16:46 简介: 对于比较小的正整数n,我们习惯用逐个整除的方法检验n是否为质数。这种算法的复杂度是O(n^0.5)。对于int范围内的整数(最大是2147483647),开方以后不到五万,对于单次计算几乎是一瞬间完成,因此可以接受。但如果n是一个大数,比如10^100,这种算法的耗时就是天文数字了。这时需要开辟新算法来判断质数。 描述: 先来说说那么大的质
·
2015-10-27 14:06
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——收费站重建问题
2014.07.07 18:19 简介: 给定一条数轴上的n个互不重合的点,你可以计算出C(n,2)=n(n-1)/2个距离。如果我给你这些距离值,你能反推出这n个点的坐标吗? 描述: 首先,考虑到你可以平移这n个点,并且可以左右反转它们得到对称的两种情况,我们不妨假设最靠左的点p0的坐标正好是0。 接下来我们通过深度优先搜索和回溯的手段逐个求出每个点的坐标。
·
2015-10-27 14:06
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第九章“图论”——割点
2014.07.04 23:57 简介: 这本教材中提到了一个概念,叫关节点(articulation point)。如果从某个无向图里去掉某个顶点以及这个顶点所有的边,如果此时图中连通分量的个数增加了,那么定义这个顶点为“关节点”。更通俗地解释,可以说如果拿走这个顶点,这幅图就破成了好几块,因此这个点好比“关节”,没有了关节整个结构也就破坏掉了。 后来上网搜了资料后,我才知道原来这
·
2015-10-27 14:05
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——Strassen矩阵乘法
2014.07.06 18:52 简介: 给定两个大小相同的方阵A和B,我们要计算AXB。方阵的大小是2的整次幂,比如2^k。对于这种特殊大小的方阵乘法,Strassen算法能够带来一定程度的加速,矩阵越大,加速效果越明显。 描述: 这个例子其实也是分治法的典型算法,通过矩阵分块进行乘法,然后合并结果。 不过我觉得这个例子,更突出的特点其实是“数学”二字。我想作者应该是想告诉
·
2015-10-27 14:05
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第十章“算法设计技巧”——平面最近点对
2014.07.06 17:56 简介: 给定二维平面上n个点,求出距离最近的两个点的距离。 描述: 个人觉得这本书的第十章是最精华的,因为每种算法思想用一个典型问题来讲解。平面最近点对问题,自然是分治法的例子了。 暴力的O(n^2)枚举法自然不用多说,两层循环能得出结果,但效率上只能承担至多几千个点的计算。 分治法的基本思路是:如果我将n个点分为两批,那么距离最短的点
·
2015-10-27 14:05
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第九章“图论”——Kruskal算法
2014.07.04 23:03 简介: 给定一个无向带权连通图(三个条件),选出n-1条边将这n个顶点连成一棵树,使得这棵树的权值之和最小。 描述: 本次使用Kruskal算法来解决这个问题。 如果有n个顶点的话,我们需要n-1条边来拼成一棵树。 Kruskal算法的基本思路,是每次拼上一条边,看看是否会造成一个环,如果会形成环则放弃这条边。 怎么保证拼成的那棵
·
2015-10-27 14:04
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第九章“图论”——多源最短路径问题
2014.07.04 19:34 简介: 给定一个带权图(有向无向皆可),找出每个顶点到其他所有顶点的最短距离。 描述: 此处介绍O(n^3)级别的Floyd算法,只需要用三层循环的简单代码就完成所有最短距离的计算。唯一需要注意的,就是三层循环里i、j、k的摆放顺序。 代码非常简单,所以无需多作解释了。 实现: 1 // A simple illustration f
·
2015-10-27 14:04
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第九章“图论”——Prim算法
2014.07.04 22:42 简介: 给定一个无向带权连通图(三个条件),选出n-1条边将这n个顶点连成一棵树,使得这棵树的权值之和最小。 描述: 本次使用Prim算法来解决这个问题。Prim算法的思想是两点:BFS与贪婪。 我们从一个顶点出发,把这个顶点对应的边加入到优先队列中。既然是优先队列,当然是边的权值短的优先。 每一轮我们从优先队列中取出一条边u->
·
2015-10-27 14:04
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第九章“图论”——单源带权最短路径问题
2014.07.04 18:32 简介: 给定一个有向图,边的权值可能各不相同(不包含负权值)。给定一个起点s,找出起点到所有顶点的最短路径距离。 描述: 这就是Dijkstra算法的用武之处了。 实际上,如果从无权值的情况出发,来思考带权最短路径问题的解法,那么应该只需要修改几行之前BFS的代码就能解决问题。 对于无权值的情况,每条边的长度都是1,那么先搜到的路径必然
·
2015-10-27 14:03
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第九章“图论”——无权值的最短路径问题
2014.07.04 18:24 简介: 给定一个有向图,你可以认为每条边长度都是1(所以叫无权值)。下面的算法可以求出从特定的起点到终点的最短路径长度。 描述: 从起点出发,根据当前顶点出发的边进行广度优先搜索,直至找到终点即可。如果搜索结束了仍然没有找到终点,那么起点无法到达终点。 实现: 1 // A simple illustration for unweighte
·
2015-10-27 14:03
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第七章“哈希”——哈希表
2014.06.22 12:36 简介: 哈希是一种数学思想,将不定长数据通过函数转换为定长数据。不定长数据通常意味着碎片化,动态分配内存等等影响存储和性能的因素。当这个定长数据是一个无符号整数时,可以用来表示数组的下标。因此就可以通过这样的哈希算法来把自定义类型的数据存入一个数组中。这样就有了哈希表的基本思想:把自定义类型(定长或者不定长)的数据存入一个数组中,具体应该插入的位置,则由哈
·
2015-10-27 14:02
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第六章“排序”——桶排序
2014.06.17 06:22 简介: 桶排序是一种非比较排序,某些情况下其最好的复杂度可以达到O(n)。虽然并不常作为排序算法使用,但桶的思想却是哈希表的关键之一。 描述: 如果我们有k个桶,编号0~k - 1。那么我们用某种依据把数组里的n个元素分配到这k个桶中去。然后把每个桶单独排序。这k个桶必须满足一个条件——第i个桶比第i + 1个桶小。这些桶必须满足了某种顺序,才能让
·
2015-10-27 14:01
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第六章“排序”——归并排序
2014.06.17 04:34 简介: 归并排序是分治法的一个好例子,属于基于比较的内部/外部排序算法。普通的归并算法具有O(n * log(n))的时间和O(n)的空间复杂度。就地归并算法能帮助降低额外空间开销,使得归并排序更高效。 描述: 分治法的思路就是先把大问题化为多个小问题,都解决了以后进行合并处理。用在归并排序上,就是先排序几个片段,然后把排好序的片段拼成一整段。有了
·
2015-10-27 14:01
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第六章“排序”——快速排序
2014.06.17 05:15 简介: 快速排序是实际应用最广的基于内存的稳定的比较排序。拥有O(n * log(n))的平均复杂度和O(n^2)的最坏复杂度。采用的思路是分治法,递归实现。 描述: 快速排序的基本思路,是从数组中选取一个值pivot作为参照,使得比pivot小的都在它左边,比pivot大的都在它右边。pivot的英文意思是支点,从这个你应该能猜到——左右的元素最
·
2015-10-27 14:01
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第六章“排序”——基数排序
2014.06.17 06:42 简介: 基数排序是一种非比较算法,通过多轮的分配与合并来排序整个数组。应用范围比较窄,根据Wikipedia的说法,它只适合整数排序。 描述: 基数排序和桶排序有点类似,都是将元素按照特定依据分配到多个桶中。但它和桶排序的区别,在于它要进行不止一次的分配与合并。每次分配元素所用的“依据”是元素的某一位数字,分配按照由低位到高位的顺序进行。教材中和我
·
2015-10-27 14:01
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第六章“排序”——希尔排序
2014.06.17 02:43 简介: 希尔排序是插入排序的改进版。交换排序的目的,是通过交换,将逆序数降低为0。每交换一对相邻元素,逆序数变化为1。如果交换的元素不相邻,则逆序数的变化可能就大于1。希尔排序的思路,就是通过交换离得更远的两个元素,让逆序数更快地变为0(当然,并不总是管用)。 描述: 我们定义一个间隔k,每隔k各元素选取一次,可以选出一个子数组。那么可以找出k个这
·
2015-10-27 14:00
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第六章“排序”——堆排序
2014.06.17 03:29 简介: 堆排序,是从这本教材上看,最好的排序算法。它是稳定排序,时间复杂度稳定保持在O(n * log(n)),空间复杂度为O(1)。原理非常简单,实现也比较简单。但是,应用却不如快速排序和归并排序那么广。原因咱们下面说说。 描述: 如果你要把数组排成升序,你可以依次把最小的元素放前面,或把最大的元素往后放。我们在第五章学习了堆,知道可以用数组来表
·
2015-10-27 14:00
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第六章“排序”——选择排序
2014.06.17 01:17 简介: 选择排序是一种O(n^2)级别的交换排序算法,属于新手必学算法。 描述: 个人觉得选择排序的代码是所有排序中最直观,最符合人类大脑思维的了。当我第一次有排序的需求时(初中时自学了一点C语言,算是人生第一次写代码),我自己试着写下的代码就是选择排序,当然我上了大学才知道“选择排序”是什么。很显然,直观且容易实现的算法基本都是最鹾的,而不直观且
·
2015-10-27 14:59
数据结构与算法
《
数据结构与算法分析
:C语言描述》复习——第六章“排序”——冒泡排序
2014.06.17 01:04 简介: 冒泡排序是O(n^2)级别的交换排序算法,原理简单,属于必知必会的基础算法之一。 思路: 排序要进行N轮,每一轮从尾部逐个向前扫描,遇到逆序对就进行交换。确保每一轮把最小的元素交换到前面去。这个过程好比水中的气泡向上飘,所以叫冒泡排序。代码非常简单,所以语言描述反而显得麻烦了。 实现: 1 // My implementation
·
2015-10-27 14:59
数据结构与算法
上一页
17
18
19
20
21
22
23
24
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他