插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过 构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插 入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从 后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 使用插入排序为一列数字进行排序的过程 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元... 阅读全文

冒泡排序的基本概念是: 依次比较相邻的两个数, 将小数放在前面, 大数放在后面。 即在第一趟, 首先比较第1个和第2个数, 将小数放前, 大数放后。 然后比较第2个数和 第3个数, 将小数放前, 大数放后, 如此继续, 直至比较最后两个数, 将小数放前, 大 数放后。 至此地一趟结束, 将最大的数放到了最后。 在第二趟:仍从第一对数开始比较 (因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前, 大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在 倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重... 阅读全文

结构 说明 Allow an object to alter its behavior when its internal state changes. The object will appear to change its class. 让一个对象在其内部状态改变的时候,其行为也随之改变。状态模式需要对每一个系统可能取得的状态创立一个状态类的子类。当系统的状态变化时,系统便改变所选的子类。 适用条件 一个对象的行为取决于其状态, 并且它必须在运行时根据状态改变自己的行为。 一个操作中包含大量的分支, 并且这些分支取决于对象的状态。 实现 public i... 阅读全文

结构 说明 Define a one-to-many dependency between objects where a state change in one object results with all its dependents being notified and updated automatically. 在对象间定义一个一对多的联系性,由此当一个对象改变了状态,所有其他相关的对象会被通知并且自动刷新。 适用条件 当抽象个体有两个相互依赖的层面时。 封装这些层面在单独物件内将可允许程序设计师单独地去变更与重复使用这些物件, 而不会产生两者之间的交互问... 阅读全文

结构 说明 Without violating encapsulation, capture and externalize an object’s internal state allowing the object to be restored to this state later. 在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。 适用条件 需要保存对象在某一时刻的状态, 并在以后需要将对象恢复到这个状态; 同时又不希望暴露对象的实现细节, 破坏对象的封装性, 这是需要使用备忘录模式。 实现 ... 阅读全文

简介 本文介绍在应用程序中使用 ASP.net MVC 5 Attribute Routing 最新特性; 本文分两部分, 第一部分介绍 Attribute Routing 的基本用法, 第二部分介绍一些高级用法。 什么是 Routing ? Routing 是 ASP.net MVC 将地址映射为 Action 方法的技术。 什么是 Attribute Routing ? ASP.net MVC 5 支持一种新类型的路由, 称之为 Attribute Routing 。 顾名思义, Attribute Routing 使用来标记定义路由, Attribute Ro... 阅读全文

升级到 VS2013 之后, 编译时会发现 VS2013 下 NuGet 不能正确识别预先配置好的存放目录, 总是把文件放在解决方案的 packages 目录下, 这个可以说是 NuGet 的 bug , 也可以说是 VS2013 的 bug , 原因是: 安装 VS2013 时, 会自动生成文件 %ProgramData%\NuGet\Config\VisualStudio\12.0\Microsoft.VisualStudio.config , 这个文件为 VS2013 配置了一个特殊的源 Microsoft and .NET , 内容如下: <?xml version="... 阅读全文

结构 说明 Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently. 包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用,从而使它们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之... 阅读全文

结构 说明 Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. 提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。 适用条件 迭代器模式是非常常见的设计模式之一, 适用条件很广, 需要访问聚合对象(数组、集合、列表等)的元素时, 即可使用迭代器模式。 实现 public interface IIterator { object CurrentItem... 阅读全文

结构 说明 Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language. 给定一个语言, 定义它的文法的一种表示,并定义一个解释器, 该解释器使用该表示来解释语言中的句子。 适用条件 当有一个语言需要解释执行, 并且可以将语言中的句子表示为一个抽象的表达式树时, 可以使用解释器模式。 实现 以逆波兰表示法为例, 其语法为: ex... 阅读全文

结构 说明 This pattern encapsulates a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations. 这个模式将请求封装成一个对象, 从而可以不用的请求对客户进行参数化, 对请求排队或者记录请求日志, 以及支持可以取消的操作。 适用条件 行为需要扩充, 将命令作为对象处理, 新的行为可以通过扩充子类完成; 命令需... 阅读全文

结构 说明 This pattern avoids coupling the sender of a request to its receiver by giving more than one object a chance to handle the request. It chains the receiving objects and passes the request along the chain until an object handles it. 使多个对象都有机会处理请求, 从而避免了请求的发送者与接收者之间的耦合。 将接收对象组成链, 在链上传递请求,... 阅读全文

本博客基于 Tabler CSS 框架, 采用 Jekyll 模板引擎, 使用 Markdown 语法编写。

博客源代码及文章内容采用 AS-IS 协议发布,转载时请 AS-IS 。