<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_还有多少青春可以挥霍</title><subtitle type="text">这刻在望著父亲笑容时,竟不知不觉的无言</subtitle><id>http://feed.cnblogs.com/blog/u/30877/rss</id><updated>2012-01-30T09:55:54Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/30877/rss"/><entry><id>http://www.cnblogs.com/kkun/archive/2012/01/30/2332309.html</id><title type="text">Javascript小技巧,去掉小数位并且不会四舍五入</title><summary type="text">1: var n3 = 52.3685; 2: document.writeln(n3 &amp;gt;&amp;gt; 0);// 52 3: 可以去掉小数。如上代码,就是这么简单右移位操作导致小数部分丢失,为何会这样呢?左移位可以吗?移位操作是否都有如此功能呢?带着疑问又写了一段代码用来测试以上想法,继续上代码 1: { 2: n = 52.123456; 3: //...</summary><published>2012-01-30T09:53:00Z</published><updated>2012-01-30T09:53:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2012/01/30/2332309.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2012/01/30/2332309.html"/><content type="html">&lt;div &gt;&lt;pre &gt;&lt;span &gt;   1:  &lt;/span&gt;&lt;span &gt;var&lt;/span&gt; n3 = 52.3685;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;document.writeln(n3 &amp;gt;&amp;gt; 0);&lt;span &gt;// 52&lt;/span&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;   3:  &lt;/span&gt;可以去掉小数。&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;如上代码,就是这么简单&lt;/p&gt;&#xD;
&lt;p&gt;右移位操作导致小数部分丢失,为何会这样呢?左移位可以吗?移位操作是否都有如此功能呢?&lt;/p&gt;&#xD;
&lt;p&gt;带着疑问又写了一段代码用来测试以上想法,继续上代码&lt;/p&gt;&#xD;
&lt;div &gt;&lt;pre &gt;&lt;span &gt;   1:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;   2:  &lt;/span&gt;    n = 52.123456;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;   3:  &lt;/span&gt;    &lt;span &gt;//alert(typeof n);&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;   4:  &lt;/span&gt;    alert(n);&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;   5:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;   6:  &lt;/span&gt;&lt;span &gt;//有符号右移&lt;/span&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;   7:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;   8:  &lt;/span&gt;    n = 52.123456;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;   9:  &lt;/span&gt;    &lt;span &gt;var&lt;/span&gt; n2 = n &amp;gt;&amp;gt; 0;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  10:  &lt;/span&gt;    &lt;span &gt;//alert(typeof n2);&lt;/span&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  11:  &lt;/span&gt;    alert(n2);&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  12:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  13:  &lt;/span&gt;&lt;span &gt;//无符号右移&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  14:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  15:  &lt;/span&gt;    n = 52.123456;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  16:  &lt;/span&gt;    &lt;span &gt;var&lt;/span&gt; n3 = n &amp;gt;&amp;gt;&amp;gt; 0;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  17:  &lt;/span&gt;    &lt;span &gt;//alert(typeof n3);&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  18:  &lt;/span&gt;    alert(n3);&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  19:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  20:  &lt;/span&gt;&lt;span &gt;//左移0位&lt;/span&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  21:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  22:  &lt;/span&gt;    n = 52.123456;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  23:  &lt;/span&gt;    &lt;span &gt;var&lt;/span&gt; n4 = n &amp;lt;&amp;lt; 0;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  24:  &lt;/span&gt;    &lt;span &gt;//alert(typeof n4);&lt;/span&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  25:  &lt;/span&gt;    alert(n4);&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  26:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  27:  &lt;/span&gt;&lt;span &gt;//按位或or&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  28:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  29:  &lt;/span&gt;    n = 52.123456;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  30:  &lt;/span&gt;    &lt;span &gt;var&lt;/span&gt; n5 = n | 0;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  31:  &lt;/span&gt;    &lt;span &gt;//alert(typeof n5);&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  32:  &lt;/span&gt;    alert(n5);&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  33:  &lt;/span&gt;}&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  34:  &lt;/span&gt;&lt;span &gt;//按位异或xor&lt;/span&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  35:  &lt;/span&gt;{&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  36:  &lt;/span&gt;    n = 52.123456;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  37:  &lt;/span&gt;    &lt;span &gt;var&lt;/span&gt; n6 = n ^ 0;&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  38:  &lt;/span&gt;    &lt;span &gt;//alert(typeof n6);&lt;/span&gt;&lt;/pre&gt;&lt;pre &gt;&lt;span &gt;  39:  &lt;/span&gt;    alert(n6);&lt;/pre&gt;&lt;pre&gt;&lt;span &gt;  40:  &lt;/span&gt;}&lt;/pre&gt;&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;那,这里不卖关子,直接给出测试结果来:以上五种方法均可以去掉小数点;然而为什么会这样呢?&lt;br&gt;翻翻EAMCScript规范吧,或许里边会有答案,见&lt;a href="http://bclary.com/2004/11/07/#a-9.5"&gt;http://bclary.com/2004/11/07/#a-9.5&lt;/a&gt;&lt;br&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a name="a-11.7.1"&gt;&lt;u&gt;先来看看位操作都做了什么,下边是位操作的实现步骤,重点在第五,第六步&lt;/u&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;b&gt;11.7.1 The Left Shift Operator (&amp;lt;&amp;lt; )&lt;/b&gt;&#xD;
&lt;p&gt;Performs a bitwise left shift operation on the left operand by the amount specified by the right operand.&#xD;
&lt;p&gt;The production &lt;i&gt;ShiftExpression&lt;/i&gt; &lt;b&gt;:&lt;/b&gt; &lt;i&gt;ShiftExpression&lt;/i&gt; &lt;b&gt;&amp;lt;&amp;lt;&lt;/b&gt; &lt;i&gt;AdditiveExpression&lt;/i&gt; is evaluated as follows:&#xD;
&lt;p&gt;1. Evaluate &lt;i&gt;ShiftExpression&lt;/i&gt;.&#xD;
&lt;p&gt;2.Call &lt;a href="http://bclary.com/2004/11/07/#a-8.7.1"&gt;GetValue&lt;/a&gt;(Result(1)).&#xD;
&lt;p&gt;3.Evaluate &lt;i&gt;AdditiveExpression&lt;/i&gt;.&#xD;
&lt;p&gt;4. Call &lt;a href="http://bclary.com/2004/11/07/#a-8.7.1"&gt;GetValue&lt;/a&gt;(Result(3)).&#xD;
&lt;p&gt;&lt;b&gt;&lt;font style="" color="#ff0000"&gt;5.Call &lt;/font&gt;&lt;a href="http://bclary.com/2004/11/07/#a-9.5"&gt;&lt;font style="" color="#ff0000"&gt;ToInt32&lt;/font&gt;&lt;/a&gt;&lt;font style="" color="#ff0000"&gt;(Result(2)).&lt;/font&gt;&lt;/b&gt;&#xD;
&lt;p&gt;&lt;b&gt;&lt;font style="" color="#ff0000"&gt;6.Call &lt;/font&gt;&lt;a href="http://bclary.com/2004/11/07/#a-9.6"&gt;&lt;font style="" color="#ff0000"&gt;ToUint32&lt;/font&gt;&lt;/a&gt;&lt;font style="" color="#ff0000"&gt;(Result(4)).&lt;/font&gt;&lt;/b&gt;&#xD;
&lt;p&gt;7.Mask out all but the least significant 5 bits of Result(6), that is, compute Result(6) &amp;amp; 0x1F.&#xD;
&lt;p&gt;8.Left shift Result(5) by Result(7) bits. The result is a signed 32 bit integer.&#xD;
&lt;p&gt;9.Return Result(8).|&lt;br&gt;&lt;br&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;u&gt;再来看看那锅ToInt32干了什么,重点在第三步&lt;/u&gt;&lt;br&gt;&lt;a name="a-9.5"&gt;&lt;b&gt;9.5&lt;/b&gt;&lt;/a&gt;&lt;b&gt; ToInt32: (Signed 32 Bit Integer)&lt;/b&gt;&lt;/p&gt;&#xD;
&lt;p&gt;The operator ToInt32 converts its argument to one of 2&lt;sup&gt;32&lt;/sup&gt; integer values in the range -2&lt;sup&gt;31&lt;/sup&gt; through 2&lt;sup&gt;31&lt;/sup&gt;-1, inclusive. This operator functions as follows:&#xD;
&lt;p&gt;1. Call &lt;a href="http://bclary.com/2004/11/07/#a-9.3"&gt;ToNumber&lt;/a&gt; on the input argument.&#xD;
&lt;p&gt;2. If Result(1) is &lt;b&gt;NaN, +0, -0, +∞&lt;/b&gt;, or &lt;b&gt;-∞&lt;/b&gt;, return +0.&#xD;
&lt;p&gt;&lt;b&gt;&lt;u&gt;&lt;font color="#000000"&gt;3. Compute sign(Result(1)) * &lt;font color="#ff0000"&gt;floor(abs(Result(1))&lt;/font&gt;).&lt;/font&gt;&lt;/u&gt;&lt;/b&gt;&#xD;
&lt;p&gt;4. Compute Result(3) modulo 2&lt;sup&gt;32&lt;/sup&gt; ; that is, a finite integer value k of Number type with positive sign and less than 2&lt;sup&gt;32&lt;/sup&gt; in magnitude such the mathematical difference of Result(3) and k is mathematically an integer multiple of 2&lt;sup&gt;32&lt;/sup&gt; .&#xD;
&lt;p&gt;5. If Result(4) is greater than or equal to 2&lt;sup&gt;31&lt;/sup&gt; , return Result(4)-2&lt;sup&gt;32&lt;/sup&gt; , otherwise return Result(4).&#xD;
&lt;p&gt;&lt;p&gt;&lt;u&gt;最后来看那个floor是什么意思,这里重点看第三步的后半拉,就是那个floor是干什么滴&lt;/u&gt;&#xD;
&lt;p&gt;&lt;i&gt;&lt;font style="background-color: #ffff00"&gt;floor(x) = x-(x modulo 1)&lt;/font&gt;&lt;/i&gt;&#xD;
&lt;p&gt;看见没,就在这一步把小数干掉了&#xD;
&lt;p&gt;Floor(x) 等于x减去x模上1&#xD;
&lt;p&gt;即&#xD;
&lt;p&gt;N= 52.123456 – 52.123456%1&#xD;
&lt;p&gt;=52.123456-0.1234559999999&#xD;
&lt;p&gt;=52&#xD;
&lt;p&gt;&lt;p&gt;&lt;u&gt;搜代斯呐,春节快乐~&lt;/u&gt;&#xD;
&lt;p&gt;&lt;br&gt;&amp;nbsp;&lt;pre &gt;&lt;/pre&gt;&lt;pre &gt;&lt;/pre&gt;&lt;pre &gt;&lt;/pre&gt;&#xD;
&lt;style type="text/css"&gt;.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&#xD;
&lt;/style&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2332309.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2012/01/30/2332309.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2012/01/06/2314885.html</id><title type="text">javascript中的封装多态和继承</title><summary type="text">封装Encapsulation 如下代码,这就算是封装了 (function (windows, undefined) { var i = 0;//相对外部环境来说,这里的i就算是封装了 })(window, undefined);继承Inheritance (function (windows, undefined) { //父类 function ...</summary><published>2012-01-06T08:48:00Z</published><updated>2012-01-06T08:48:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2012/01/06/2314885.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2012/01/06/2314885.html"/><content type="html">&lt;p&gt;&lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;封装Encapsulation&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;如下代码,这就算是封装了&lt;/p&gt;  &lt;div &gt;   &lt;pre &gt;(&lt;span &gt;function&lt;/span&gt; (windows, undefined) {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;var&lt;/span&gt; i = 0;&lt;span &gt;//相对外部环境来说,这里的i就算是封装了&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;})(window, undefined);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;继承Inheritance&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;div &gt;&#xD;
  &lt;pre&gt;(&lt;span &gt;function&lt;/span&gt; (windows, undefined) {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;//父类&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;function&lt;/span&gt; Person() { }&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Person.prototype.name = &lt;span &gt;&amp;quot;name in Person&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;//子类&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;function&lt;/span&gt; Student() { }&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Student.prototype = &lt;span &gt;new&lt;/span&gt; Person();           &lt;span &gt;//修复原型&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;Student.prototype.constructor = Student;    &lt;span &gt;//构造函数&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Student.prototype.supr = Person.prototype;  &lt;span &gt;//父类&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;//创建子类实例&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;var&lt;/span&gt; stu = &lt;span &gt;new&lt;/span&gt; Student();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Student.prototype.age = 28;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;Student.prototype.supr.name = &lt;span &gt;&amp;quot;name in Student instance&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;//打印子类成员及父类成员&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;alert(stu.name); &lt;span &gt;//name in Student instance&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;alert(stu.supr.name); &lt;span &gt;//name in Person&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;alert(stu.age); &lt;span &gt;//28&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;})(window, undefined);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&#xD;
&#xD;
&lt;p&gt;&amp;#160;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;&lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;多态Polymorphism&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&#xD;
&#xD;
&lt;p&gt;有了继承,多态就好办了&lt;/p&gt;&#xD;
&#xD;
&lt;div &gt;&#xD;
  &lt;pre &gt;&lt;span &gt;//这就是继承了&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;(&lt;span &gt;function&lt;/span&gt; (windows, undefined) {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;//父类&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;function&lt;/span&gt; Person() { }&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Person.prototype.name = &lt;span &gt;&amp;quot;name in Person&amp;quot;&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;Person.prototype.learning = &lt;span &gt;function&lt;/span&gt; () {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;alert(&lt;span &gt;&amp;quot;learning in Person&amp;quot;&lt;/span&gt;)&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;}&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;//子类&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;function&lt;/span&gt; Student() { }&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;Student.prototype = &lt;span &gt;new&lt;/span&gt; Person();           &lt;span &gt;//修复原型&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Student.prototype.constructor = Student;    &lt;span &gt;//构造函数&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;Student.prototype.supr = Person.prototype;  &lt;span &gt;//父类&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Student.prototype.learning = &lt;span &gt;function&lt;/span&gt; () {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;alert(&lt;span &gt;&amp;quot;learning in Student&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;}&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;//工人&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;function&lt;/span&gt; Worker() { }&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Worker.prototype = &lt;span &gt;new&lt;/span&gt; Person();           &lt;span &gt;//修复原型&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;Worker.prototype.constructor = Worker;    &lt;span &gt;//构造函数&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;Worker.prototype.supr = Person.prototype;  &lt;span &gt;//父类&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;Worker.prototype.learning = &lt;span &gt;function&lt;/span&gt; () {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;alert(&lt;span &gt;&amp;quot;learning in Worker&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;}&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;//工厂&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;var&lt;/span&gt; personFactory = &lt;span &gt;function&lt;/span&gt; (type) {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;switch&lt;/span&gt; (type) {&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;case&lt;/span&gt; &lt;span &gt;&amp;quot;Worker&amp;quot;&lt;/span&gt;:&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;return&lt;/span&gt; &lt;span &gt;new&lt;/span&gt; Worker();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;break&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;case&lt;/span&gt; &lt;span &gt;&amp;quot;Student&amp;quot;&lt;/span&gt;:&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;return&lt;/span&gt; &lt;span &gt;new&lt;/span&gt; Student();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;break&lt;/span&gt;;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;}&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;return&lt;/span&gt; &lt;span &gt;new&lt;/span&gt; Person();&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;}&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;&lt;span &gt;//客户端&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&lt;span &gt;var&lt;/span&gt; person = personFactory(&lt;span &gt;&amp;quot;Student&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;person.learning(); &lt;span &gt;//learning in Student&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;person = personFactory(&lt;span &gt;&amp;quot;Worker&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;person.learning(); &lt;span &gt;//learning in Worker&lt;/span&gt;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre&gt;&amp;#160;&lt;/pre&gt;&#xD;
&#xD;
  &lt;pre &gt;})(window, undefined);&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;style type="text/css"&gt;&#xD;
.csharpcode, .csharpcode pre&#xD;
{&#xD;
	font-size: small;&#xD;
	color: black;&#xD;
	font-family: consolas, "Courier New", courier, monospace;&#xD;
	background-color: #ffffff;&#xD;
	/*white-space: pre;*/&#xD;
}&#xD;
.csharpcode pre { margin: 0em; }&#xD;
.csharpcode .rem { color: #008000; }&#xD;
.csharpcode .kwrd { color: #0000ff; }&#xD;
.csharpcode .str { color: #006080; }&#xD;
.csharpcode .op { color: #0000c0; }&#xD;
.csharpcode .preproc { color: #cc6633; }&#xD;
.csharpcode .asp { background-color: #ffff00; }&#xD;
.csharpcode .html { color: #800000; }&#xD;
.csharpcode .attr { color: #ff0000; }&#xD;
.csharpcode .alt &#xD;
{&#xD;
	background-color: #f4f4f4;&#xD;
	width: 100%;&#xD;
	margin: 0em;&#xD;
}&#xD;
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2314885.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2012/01/06/2314885.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2011/12/15/2288744.html</id><title type="text">[转载]我想和你一起吃晚餐</title><summary type="text">父亲下班回家已经很晚了，身体疲倦、心情也不太好。这时，他发现5岁的儿子正靠在门边等他。 “我可以问你一个问题吗？”儿子问。 “什么问题？”父亲有些不耐烦。 “爸，你1小时能挣多少钱？” “这与你无关。为什么要问这样的问题？”父亲生气地说。 “我只是想知道。”儿子望着父亲，恳求道：“请告诉我，你1小时挣多少钱？” “假如你一定要知道的话，那我就告诉你吧。我1小时挣20美元。”...</summary><published>2011-12-15T05:16:00Z</published><updated>2011-12-15T05:16:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2011/12/15/2288744.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2011/12/15/2288744.html"/><content type="html">&lt;p&gt;父亲下班回家已经很晚了，身体疲倦、心情也不太好。这时，他发现5岁的儿子正靠在门边等他。&lt;/p&gt;  &lt;p&gt;“我可以问你一个问题吗？”儿子问。&lt;/p&gt;  &lt;p&gt;“什么问题？”父亲有些不耐烦。&lt;/p&gt;  &lt;p&gt;“爸，你1小时能挣多少钱？”&lt;/p&gt;  &lt;p&gt;“这与你无关。为什么要问这样的问题？”父亲生气地说。&lt;/p&gt;  &lt;p&gt;“我只是想知道。”儿子望着父亲，恳求道：“请告诉我，你1小时挣多少钱？”&lt;/p&gt;  &lt;p&gt;“假如你一定要知道的话，那我就告诉你吧。我1小时挣20美元。”父亲有点按捺不住了。&lt;/p&gt;  &lt;p&gt;“喔。”儿子沮丧地低下头。过了一会儿，他又抬起头，犹犹豫豫地说：“爸——，可以借给我10美元吗？”&lt;/p&gt;  &lt;p&gt;父亲终于发怒了：“如果问这种问题就是想要向我借钱去买毫无意义的玩具，那你还是回房间去，躺到床上好好想想为什么你会那么自私。我每天长时间辛苦工作，现在需要休息，没时间和你玩小孩子的游戏。”&lt;/p&gt;  &lt;p&gt;儿子一声不吭地走回自己的房间，轻轻关上了门。&lt;/p&gt;  &lt;p&gt;儿子走后，父亲还在生气。过了一阵儿，他渐渐平静下来。想到自己刚才有些粗暴，他走进孩子的房间，轻声问：“你睡了吗？”&lt;/p&gt;  &lt;p&gt;“爸，还没呢。我还醒着。”儿子回答道。&lt;/p&gt;  &lt;p&gt;“爸爸今天心情不太好，所以刚才可能对你太凶了，”父亲说，“——这是你要的10美元。”“爸，谢谢你。”儿子欣喜地接过钱，然后又从枕头下拿出一些皱皱的钞票，仔细地数起来。&lt;/p&gt;  &lt;p&gt;“你已经有钱了为什么还要？”父亲又开始生气了。&lt;/p&gt;  &lt;p&gt;“因为只有那些还不够，不过现在足够了。”儿子回答道。然后他将数好的钱全部放在父亲手里，认真地说：“爸，我现在有20美元了，我可以向你买一个小时的时间吗？明天请早一点回家，我想和你一起吃晚餐。”&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A man came home from work late tired and irritated to find his5-year-old son waiting for him at the door.&lt;/p&gt;  &lt;p&gt;Daddy, may I ask you a question?&lt;/p&gt;  &lt;p&gt;Yes, sure, what is it? Replied the man.&lt;/p&gt;  &lt;p&gt;Daddy, how much do you make an hour?&lt;/p&gt;  &lt;p&gt;That’s none of you business, why do you ask such a thing? The man said angrily.&lt;/p&gt;  &lt;p&gt;I just want to know, please tell me. How much do you make an hour? Pleeaded The little boy.&lt;/p&gt;  &lt;p&gt;If you must know, I make 20 dollars an hour.&lt;/p&gt;  &lt;p&gt;“Oh”, the little boy replied with head down. Looking up he said: daddy, may I please borrow 10 dollars.&lt;/p&gt;  &lt;p&gt;The father was furious. If you only reason you asked that so you can borrow some money to buy a silly toy or some other nonsense, then you march yourself straight to your room and go to bed. Think about why you being so selfish. I work hard every day for such childish behavior.&lt;/p&gt;  &lt;p&gt;The little boy quitely went to his room and shut the door.&lt;/p&gt;  &lt;p&gt;The man sat down and started to even angrier about the little boy’s questions. How dare you ask such a question only to get some money. After about an hour or so, the man has calmed down and started to think. Maybe there’s something he really needed to buy with that 10 dollars, and he really didn’t ask for money very often.&lt;/p&gt;  &lt;p&gt;The man went to the door the little boy’s room and opened the door.&lt;/p&gt;  &lt;p&gt;Are you sleep, son? He asked.&lt;/p&gt;  &lt;p&gt;No, daddy, I’m awake. Replied the boy.&lt;/p&gt;  &lt;p&gt;I have been thinking may be I was too hard on you earlier. Say the man. It’s been a long day, and I took out my aggravation on you, here is the 10 dollars you asked for.&lt;/p&gt;  &lt;p&gt;The little boy sat straight up, smiling.&lt;/p&gt;  &lt;p&gt;Oh, thank you, daddy. He yelled. Then reaching under his pillow, he pulled out some crumble up bills. The man seeing the boy already had money, started to get angry again.&lt;/p&gt;  &lt;p&gt;The little boy slowly counts about his money then look up at his father.&lt;/p&gt;  &lt;p&gt;Why do you want more money if you already had some. The father grumbled.&lt;/p&gt;  &lt;p&gt;Because I didn’t have enough, but now I do. For little boy reply.&lt;/p&gt;  &lt;p&gt;Daddy, I have 20 dollars now, can I borrow an hour your time, please come home early tomorrow. I would like to have dinner with you.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;直接转载自 &lt;a href="http://sjzflps.jjtang.com/blog/blog-htm-do-read-uid-681206-tid-628328.html"&gt;http://sjzflps.jjtang.com/blog/blog-htm-do-read-uid-681206-tid-628328.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2288744.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/12/15/2288744.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2011/12/05/2276411.html</id><title type="text">经典排序算法 - 图书馆排序(Library Sort)</title><summary type="text">经典排序算法 - 图书馆排序(Library Sort) 思路简介,大概意思是说,排列图书时,如果在每本书之间留一定的空隙,那么在进行插入时就有可能会少移动一些书,说白了就是在插入排序的基础上,给书与书之间留一定的空隙,这个空隙越大,需要移动的书就越少,这是它的思路,用空间换时间 看红线标的那句话知道,这个空隙留多大,你自己定 图书馆排序的关键是分配空间,分配完空间后直接使用插入排序即可 ...</summary><published>2011-12-05T02:01:00Z</published><updated>2011-12-05T02:01:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2011/12/05/2276411.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2011/12/05/2276411.html"/><content type="html">&lt;p&gt;&lt;b&gt;经典排序算法 - 图书馆排序(Library Sort)&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;思路简介,大概意思是说,排列图书时,如果在每本书之间留一定的空隙,那么在进行插入时就有可能会少移动一些书,说白了就是在插入排序的基础上,给书与书之间留一定的空隙,这个空隙越大,需要移动的书就越少,这是它的思路,用空间换时间&lt;/p&gt;  &lt;p&gt;看红线标的那句话知道,这个空隙留多大,你自己定&lt;/p&gt;  &lt;p&gt;图书馆排序的关键是分配空间,分配完空间后直接使用插入排序即可&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kkun/201112/201112051000515224.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Image(4)" border="0" alt="Image(4)" src="http://images.cnblogs.com/cnblogs_com/kkun/201112/201112051000557369.png" width="919" height="242" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;进行空间分配的过程&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;这个我实在是找不到相关的资料,没准就是平均分配嘞&lt;/p&gt;  &lt;p&gt;&lt;b&gt;进行插入排序的过程&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;举例待排数组[ &lt;u&gt;0 0 6&lt;/u&gt; &lt;u&gt;0 0 2&lt;/u&gt; &lt;u&gt;0 0 4&lt;/u&gt; &lt;u&gt;0 0 1&lt;/u&gt; &lt;u&gt;0 0 5&lt;/u&gt; &lt;u&gt;0 0 9&lt;/u&gt; ],直接对它进行&lt;u&gt;插入排序&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;第一次移动,直接把2放6前边&lt;/p&gt;  &lt;p&gt;[ 0 2 6 0 0 0 0 0 4 0 0 1 0 0 5 0 0 9 ]&lt;/p&gt;  &lt;p&gt;第二次移动,先把6往后挪,然后把4放在刚才6的位置,移动了一个位置&lt;/p&gt;  &lt;p&gt;[ 0 2 4 6 0 0 0 0 0 0 0 1 0 0 5 0 0 9 ]&lt;/p&gt;  &lt;p&gt;第三次移动,直接把1放2前边&lt;/p&gt;  &lt;p&gt;[ 1 2 4 6 0 0 0 0 0 0 0 0 0 0 5 0 0 9 ]&lt;/p&gt;  &lt;p&gt;第四次移动,再把6往后挪一位,把5放在刚才6的位置&lt;/p&gt;  &lt;p&gt;[ 1 2 4 5 6 0 0 0 0 0 0 0 0 0 0 0 0 9 ]&lt;/p&gt;  &lt;p&gt;第五次移动后,把9放6后边,排序结束&lt;/p&gt;  &lt;p&gt;[ 1 2 4 5 6 9 0 0 0 0 0 0 0 0 0 0 0 0 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html"&gt;返回主目录 [经典排序算法][集锦]&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;reference&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cs.sunysb.edu/~bender/newpub/BenderFaMo06-librarysort.pdf"&gt;http://www.cs.sunysb.edu/~bender/newpub/BenderFaMo06-librarysort.pdf&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://zhangyu8374.iteye.com/blog/86317"&gt;http://zhangyu8374.iteye.com/blog/86317&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/richselian/archive/2011/09/16/2179152.html"&gt;http://www.cnblogs.com/richselian/archive/2011/09/16/2179152.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://algorithm.l918.net/forum.php?mod=viewthread&amp;amp;tid=19"&gt;http://algorithm.l918.net/forum.php?mod=viewthread&amp;amp;tid=19&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.softpanorama.org/Algorithms/Sorting/insertion_sort.shtml"&gt;http://www.softpanorama.org/Algorithms/Sorting/insertion_sort.shtml&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2276411.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/12/05/2276411.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2011/11/28/2266559.html</id><title type="text">经典排序算法 - 圈排序Cycle Sort</title><summary type="text">经典排序算法 - Cycle Sort Cycle sort的思想与计数排序太像了,理解了基数排序再看这个会有很大的帮助, 圈排序与计数排序的区别在于圈排序只给那些需要计数的数字计数,先看完文章吧,看完再回来理解这一句话 所谓的圈的定义,我只能想到用例子来说明,实在不好描述 待排数组[ 6 2 4 1 5 9 ] 排完序后[ 1 2 4 5 6 9 ] 数组索引[ 0 1 2 3 4 ...</summary><published>2011-11-28T09:50:00Z</published><updated>2011-11-28T09:50:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2011/11/28/2266559.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2011/11/28/2266559.html"/><content type="html">&lt;p&gt;&lt;b&gt;经典排序算法 - Cycle Sort&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Cycle sort的思想与&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260299.html"&gt;计数排序&lt;/a&gt;太像了,理解了基数排序再看这个会有很大的帮助,&lt;/p&gt;  &lt;p&gt;&lt;u&gt;圈排序与计数排序的区别在于圈排序只给那些需要计数的数字计数,先看完文章吧,看完再回来理解这一句话&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;所谓的圈的定义,我只能想到用例子来说明,实在不好描述&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;排完序后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;数组索引[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第一部分&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 第一步,我们现在来观察待排数组和排完后的结果,以及待排数组的索引,可以发现&lt;/p&gt;  &lt;p&gt;排完序后的6应该出现在索引4的位置上,而它现在却在位置0上,&lt;/p&gt;  &lt;p&gt;记住这个位置啊,一直找到某个数应该待在位置0上我们的任务就完成了&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;排完序后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;数组索引[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 第二步,而待排数组索引4位置上的5应该出现在索引3的位置上&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;排完序后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;数组索引[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 第三步,同样的,待排数组索引3的位置是1,1应该出现在位置0上,注意注意,找到这么一个数了:1,它应该待在位置0上&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;排完序后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;数组索引[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 第四步,而索引0处却放着6,而6应该出现在索引4的位置,至此可以发现,回到原点了,问题回到第一步了,&lt;/p&gt;  &lt;p&gt;所以这里并不存在所谓的第四步,前三步就已经转完一圈了&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;排完序后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;数组索引[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;这就是所谓的一圈!真不好描述,不知道您看明白没...汗.&lt;/p&gt;  &lt;p&gt;前三步转完一圈,得到的数据分别是[ 6 5 1 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第二部分&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 第一步,圈排序并不是一圈排序,而一圈或多圈排序,所以,还得继续找,这一步从第二个数字2处开始转圈&lt;/p&gt;  &lt;p&gt;待排中的2位于索引1处,排序完毕仍然处于位置1位置,所以这一圈完毕,得到圈数据[ 2 ]&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;排完序后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;数组索引[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第三部分&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 第一步,同上,4也出现了它应该待的位置,结束这一圈,得到第三个圈:[ 4 ]&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;排完序后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;数组索引[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第四部分&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 第一步,由于1和5出现在第一圈里,这是什么意思呢,说明这两个数已经有自己的圈子了,不用再找了,&lt;/p&gt;  &lt;p&gt;即是找,最后还是得到第一圈的数据[ 6 5 1 ],所以,1和5跳过,这一部分实际应该找的是9,来看看9的圈子&lt;/p&gt;  &lt;p&gt;9应该出现在索引5的位置,实际上它就在索引5的位置,与第二部分的第一步的情况一样,所以这一圈的数据也出来了:[ 9 ]&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;排完序后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;数组索引[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;一共找到四个圈子,分别是&lt;/p&gt;  &lt;p&gt;[ 6 5 1 ] , [ 2 ] ,[ 4 ] , [ 9 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;如果一个圈只有一个数字,那么它是不需要转圈的,即不需要排序,那么只有第一个圈排序即可&lt;/p&gt;  &lt;p&gt;你可能要问了,前边的那些圈子都是基于已知排序结果才能得到,我都已知结果还排个毛啊&lt;/p&gt;  &lt;p&gt;以上内容都是为了说明什么是圈,知道什么是圈后才能很好的理解圈排序&lt;/p&gt;  &lt;p&gt;现在来分解排序的细节&lt;/p&gt;  &lt;p&gt;第一步,将6取出来,计算出有4个数字比6小,将6放入索引4,同时原索引4位置的数字5出列&lt;/p&gt;  &lt;p&gt;排序之前[ 0 2 4 1 5 9 ] 6&lt;/p&gt;  &lt;p&gt;排序之后[ 0 2 4 1 6 9 ] 5&lt;/p&gt;  &lt;p&gt;索引位置[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第二步,当前数字5,计算出有3个数字比5小,将5放入索引3,同时原索引3位置的数字&lt;/p&gt;  &lt;p&gt;排序之前[ 0 2 4 1 6 9 ] 5&lt;/p&gt;  &lt;p&gt;排序之后[ 0 2 4 5 6 9 ] 1&lt;/p&gt;  &lt;p&gt;索引位置[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第三步,当前数字1,计算出有0个数字比1小,将1放入索引0,索引0处为空,这圈完毕&lt;/p&gt;  &lt;p&gt;排序之前[ 0 2 4 5 6 9 ] 1&lt;/p&gt;  &lt;p&gt;排序之后[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;索引位置[ 0 1 2 3 4 5 ]&lt;/p&gt;  &lt;p&gt;第一个圈[ 6 5 1 ]完毕&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第四步,取出下一个数字2,计算出有1个数字比2小,将2放入索引1处,发现它本来就在索引1处&lt;/p&gt;  &lt;p&gt;第五步,取出下一个数字4,计算出有2个数字比4小,将4放入索引2处,发现它本来就在索引2处&lt;/p&gt;  &lt;p&gt;第六步,取出下一个数字5,5在第一个圈内,不必排序&lt;/p&gt;  &lt;p&gt;第七步,取出下一个数字6,6在第一个圈内,不必排序&lt;/p&gt;  &lt;p&gt;第八步,取出下一个数字9,计算出有5个数字比9小,将9放入索引5处,发现它本来就在索引5处&lt;/p&gt;  &lt;p&gt;全部排序完毕&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html"&gt;返回主目录 [经典排序算法][集锦]&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2266559.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/28/2266559.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2011/11/24/2261548.html</id><title type="text">经典排序算法 - Strand Sort</title><summary type="text">经典排序算法 - Strand Sort Strand sort是思路是这样的,它首先需要一个空的数组用来存放最终的输出结果,给它取个名字叫&amp;quot;有序数组&amp;quot; 然后每次遍历待排数组,得到一个&amp;quot;子有序数组&amp;quot;,然后将&amp;quot;子有序数组&amp;quot;与&amp;quot;有序数组&amp;quot;合并排序 重复上述操作直到待排数组为空结束 看例子吧 待排数组[ 6 2 4 1 5 9 ] 第一趟遍历得到&amp;quot;子有序数组&amp;quot;[ 6 9],并将其归并排...</summary><published>2011-11-24T05:32:00Z</published><updated>2011-11-24T05:32:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261548.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261548.html"/><content type="html">&lt;p&gt;&lt;b&gt;经典排序算法 - Strand Sort&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Strand sort是思路是这样的,它首先需要一个空的数组用来存放最终的输出结果,给它取个名字叫&amp;quot;有序数组&amp;quot;&lt;/p&gt;  &lt;p&gt;然后每次遍历待排数组,得到一个&amp;quot;子有序数组&amp;quot;,然后将&amp;quot;子有序数组&amp;quot;与&amp;quot;有序数组&amp;quot;合并排序&lt;/p&gt;  &lt;p&gt;重复上述操作直到待排数组为空结束&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;看例子吧&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;第一趟遍历得到&amp;quot;子有序数组&amp;quot;[ 6 9],并将其归并排序到有序数组里&lt;/p&gt;  &lt;p&gt;待排数组[ 2 4 1 5]&lt;/p&gt;  &lt;p&gt;有序数组[ 6 9 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第二趟遍历再次得到&amp;quot;子有序数组&amp;quot;[2 4 5],将其归并排序到有序数组里&lt;/p&gt;  &lt;p&gt;待排数组[ 1 ]&lt;/p&gt;  &lt;p&gt;有序数组[ 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;第三趟遍历再次得到&amp;quot;子有序数组&amp;quot;[ 1 ],将其归并排序到有序数组里&lt;/p&gt;  &lt;p&gt;待排数组[ ... ]&lt;/p&gt;  &lt;p&gt;有序数组[ 1 2 4 5 6 9 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;待排数组为空,排序结束&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html"&gt;返回主目录 [经典排序算法][集锦]&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2261548.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261548.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2011/11/24/2261529.html</id><title type="text">经典排序算法 - Flash Sort</title><summary type="text">经典排序算法 - Flash Sort FlashSort依然类似桶排,主要改进了对要使用的桶的预测,或者说,减少了无用桶的数量从而节省了空间,例如 待排数字[ 6 2 4 1 5 9 100 ]桶排需要100个桶,而flash sort则由于可以预测桶则只需要7个桶 即待排数组长度个桶,如何预测将要使用的桶有这么一个公式 该排序有前置条件,需要知道待排数组的区间和待排数组的长度, ...</summary><published>2011-11-24T05:14:00Z</published><updated>2011-11-24T05:14:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261529.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261529.html"/><content type="html">&lt;p&gt;&lt;b&gt;经典排序算法 - Flash Sort&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;FlashSort依然类似&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260267.html"&gt;桶排&lt;/a&gt;,主要改进了对要使用的桶的预测,或者说,减少了无用桶的数量从而节省了空间,例如&lt;/p&gt;  &lt;p&gt;待排数字[ 6 2 4 1 5 9 100 ]&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260267.html"&gt;桶排&lt;/a&gt;需要100个桶,而flash sort则由于可以预测桶则只需要7个桶&lt;/p&gt;  &lt;p&gt;即待排数组长度个桶,如何预测将要使用的桶有这么一个公式&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kkun/201111/20111124131411478.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="flashsort" border="0" alt="flashsort" src="http://images.cnblogs.com/cnblogs_com/kkun/201111/201111241314125461.png" width="370" height="51" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;该排序有&lt;u&gt;&lt;font style="background-color: #ffff00"&gt;前置条件,需要知道待排数组的区间和待排数组的长度&lt;/font&gt;,&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;例如已知待排数组[ 6 2 4 1 5 9 ]的长度为6,最大值9,最小值1,这三个是已知条件,如果无法知道这三个则无法应用该排序&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;预测的思想&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;如果有这样一个待排数组,其最大值是100,最小值是1,数组长度为100,那么50在排完序后极有可能出现在正中间,flash sort就是基于这个思路&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;预测桶号细节&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;具体看6可能出现的桶号&lt;/p&gt;  &lt;p&gt;Ai - Amin 是 6 - 1 = 5&lt;/p&gt;  &lt;p&gt;Amax - Amin 是9 - 1 = 8&lt;/p&gt;  &lt;p&gt;m - 1 是数组长度6 - 1 = 5&lt;/p&gt;  &lt;p&gt;则(m - 1) * (Ai - Amin) / (Amax - Amin) = 5 * 5 / 8 =25/8 = 3.125&lt;/p&gt;  &lt;p&gt;最后加上1等于 4.125&lt;/p&gt;  &lt;p&gt;6预测的桶号为4.125&lt;/p&gt;  &lt;p&gt;2预测的桶号为1.625&lt;/p&gt;  &lt;p&gt;4预测的桶号为2.875&lt;/p&gt;  &lt;p&gt;1预测的桶号为1&lt;/p&gt;  &lt;p&gt;5预测的桶号为3.5&lt;/p&gt;  &lt;p&gt;9预测的桶号为5&lt;/p&gt;  &lt;p&gt;去掉小数位后,每个数字都拥有自己预测的桶号,对应如下所示&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;预测桶号[ 4 1 2 1 3 5 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;入桶规则&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;1号桶 2,1&lt;/p&gt;  &lt;p&gt;2号桶 4&lt;/p&gt;  &lt;p&gt;3号桶 5&lt;/p&gt;  &lt;p&gt;4号桶 6&lt;/p&gt;  &lt;p&gt;5号桶 9&lt;/p&gt;  &lt;p&gt;1号桶内两个数字使用任意排序算法使之有序,其它桶如果此种情况同样需要在桶内排序,使用什么排序算法不重要,重要的是排成从小到大即可&lt;/p&gt;  &lt;p&gt;最后顺序从桶里取出来即可&lt;/p&gt;  &lt;p&gt;[1 2 4 5 6 9]&lt;/p&gt;  &lt;p&gt;参考&lt;a href="http://en.wikipedia.org/wiki/Flashsort"&gt;http://en.wikipedia.org/wiki/Flashsort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html"&gt;返回主目录 [经典排序算法][集锦]&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2261529.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261529.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2011/11/24/2261240.html</id><title type="text">经典排序算法 - Proxmap Sort</title><summary type="text">经典排序算法 - Proxmap Sort 这个排序是桶排序和基数排序的改进,理解了前两者,这个排序很容易理解 先回忆下桶排序是怎么回事,它与桶的区别在于入桶规则,桶排序里是1入1号桶,2入2号桶 这个排序把数字分区了,然后给出一个所谓的键,例如它规定0-9都入0号桶 10-19都入1号桶,这样桶覆盖的范围将增大10倍,这在某种情况下是很有用的 有了桶排的基础后,再看下边两张图就什么都明...</summary><published>2011-11-24T02:02:00Z</published><updated>2011-11-24T02:02:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261240.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261240.html"/><content type="html">&lt;p&gt;&lt;b&gt;经典排序算法 - Proxmap Sort&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;这个排序是桶排序和基数排序的改进,理解了前两者,这个排序很容易理解&lt;/p&gt;  &lt;p&gt;先回忆下桶排序是怎么回事,它与桶的区别在于入桶规则,桶排序里是1入1号桶,2入2号桶&lt;/p&gt;  &lt;p&gt;这个排序把数字分区了,然后给出一个所谓的键,例如它规定0-9都入0号桶&lt;/p&gt;  &lt;p&gt;10-19都入1号桶,这样桶覆盖的范围将增大10倍,这在某种情况下是很有用的&lt;/p&gt;  &lt;p&gt;有了桶排的基础后,再看下边两张图就什么都明白了,不再分解过程了&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kkun/201111/201111241002285988.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ProxmapSort" border="0" alt="ProxmapSort" src="http://images.cnblogs.com/cnblogs_com/kkun/201111/201111241002285432.png" width="311" height="131" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;图1&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/kkun/201111/201111241002284875.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ProxmapSortII" border="0" alt="ProxmapSortII" src="http://images.cnblogs.com/cnblogs_com/kkun/201111/201111241002288779.png" width="311" height="132" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;图2&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html"&gt;返回主目录 [经典排序算法][集锦]&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2261240.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261240.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html</id><title type="text">[经典排序算法][集锦]</title><summary type="text">经典排序算法 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处 这一系列重点在理解,所以例子什么的都是最简单的情况,难免失误之处,多指教 大多数排序算法都给出了每一步的状态,以方便初学者更容易理解,通俗易懂,部分难以理解的排序算法则给出了大量的图示,也算是一个特色吧 经典排序算法 - 快速排序Quick sort 经典排序算法 - 桶排序Bucket sort ...</summary><published>2011-11-23T06:46:00Z</published><updated>2011-11-23T06:46:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html"/><content type="html">&lt;p&gt;&lt;strong&gt;经典排序算法&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 经典排序算法,以下文章参考了大量网上的资料,大部分都给出了出处&lt;/p&gt;  &lt;p&gt;这一系列重点在&lt;span style="color: #ff0000; font-size: medium"&gt;&lt;strong&gt;理解&lt;/strong&gt;&lt;/span&gt;,所以例子什么的都是最简单的情况,难免失误之处,多指教&lt;/p&gt;  &lt;p&gt;大多数排序算法都给出了每一步的状态,以方便初学者更容易理解,通俗易懂,部分难以理解的排序算法则给出了大量的图示,也算是一个特色吧&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260270.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 快速排序Quick sort&lt;/font&gt;&lt;/a&gt;&lt;font color="#9b00d3"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260267.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 桶排序Bucket sort&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260265.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 -&amp;#160; 插入排序Insertion sort&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260275.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 基数排序Radix sort&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260273.html"&gt;经典排序算法 - 鸽巢排序Pigeonhole sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260271.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 归并排序Merge sort&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260280.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 冒泡排序Bubble sort&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260281.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 选择排序Selection sort&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260289.html"&gt;经典排序算法 - 鸡尾酒排序Cocktail sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260288.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 希尔排序Shell sort&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260286.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 堆排序Heap sort序&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260296.html"&gt;经典排序算法 - 地精排序Gnome Sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260295.html"&gt;经典排序算法 - 奇偶排序Odd-even sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260293.html"&gt;经典排序算法 - 梳排序Comb sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260291.html"&gt;经典排序算法 - 耐心排序Patience Sorting&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260301.html"&gt;经典排序算法 - 珠排序Bead Sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260299.html"&gt;&lt;font color="#9b00d3"&gt;经典排序算法 - 计数排序Counting sort&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;新增&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261240.html"&gt;经典排序算法 - Proxmap Sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261529.html"&gt;经典排序算法 - Flash Sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/24/2261548.html"&gt;经典排序算法 - Strand Sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/28/2266559.html"&gt;经典排序算法 - 圈排序Cycle Sort&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/12/05/2276411.html"&gt;经典排序算法 - 图书馆排序(Library Sort)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[持续更新]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;出个小题目&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;已知数组长度为100,且基本有序,&lt;u&gt;里面有仅有两个数字位置不对,但具体是那两个数字不知道&lt;/u&gt;,数字不重复&lt;/p&gt;  &lt;p&gt;例如[1 &lt;font style="background-color: #ffff00"&gt;99&lt;/font&gt; 2 3 4 5 6 7 8 9 10 11 …… 88 89 90 91 92 93 94 95 96 97 98 &lt;font style="background-color: #ffff00"&gt;2&lt;/font&gt; 100 ]&lt;/p&gt;  &lt;p&gt;要求从小到大排序&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2260312.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kkun/archive/2011/11/23/2260299.html</id><title type="text">经典排序算法 - 计数排序Counting sort</title><summary type="text">经典排序算法 - 计数排序Counting sort 注意与基数排序区分,这是两个不同的排序 计数排序的过程类似小学选班干部的过程,如某某人10票,作者9票,那某某人是班长,作者是副班长 大体分两部分,第一部分是拉选票和投票,第二部分是根据你的票数入桶 看下具体的过程,一共需要三个数组,分别是待排数组,票箱数组,和桶数组 var unsorted = new int[] { 6, 2, ...</summary><published>2011-11-23T06:40:00Z</published><updated>2011-11-23T06:40:00Z</updated><author><name>kkun</name><uri>http://www.cnblogs.com/kkun/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260299.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260299.html"/><content type="html">&lt;p&gt;&lt;b&gt;经典排序算法 - 计数排序Counting sort&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;注意与&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260275.html"&gt;基数排序&lt;/a&gt;区分,这是两个不同的排序&lt;/p&gt;  &lt;p&gt;计数排序的过程类似小学选班干部的过程,如某某人10票,作者9票,那某某人是班长,作者是副班长&lt;/p&gt;  &lt;p&gt;大体分两部分,&lt;u&gt;第一部分是拉选票和投票,第二部分是根据你的票数入桶&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;看下具体的过程,一共需要三个数组,分别是待排数组,票箱数组,和桶数组&lt;/p&gt;  &lt;p&gt;var unsorted = new int[] { 6, 2, 4, 1, 5, 9 };&amp;#160; //待排数组&lt;/p&gt;  &lt;p&gt;var ballot = new int[unsorted.Length];&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //票箱数组&lt;/p&gt;  &lt;p&gt;var bucket = new int[unsorted.Length];&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //桶数组&lt;/p&gt;  &lt;p&gt;最后再看桶数组,先看待排数组和票箱数组&lt;/p&gt;  &lt;p&gt;&lt;u&gt;初始状态,迭代变量i = 0时,待排数组[i] = 6,票箱数组[i] = 0,这样通过迭代变量建立了数字与其桶号(即票数)的联系&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;待排数组[ &lt;font style="background-color: #ffff00"&gt;6&lt;/font&gt; 2 4 1 5 9 ] &lt;font style="background-color: #ffff00"&gt;i = 0时,可以从待排数组中取出6&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;票箱数组[ &lt;font style="background-color: #ffff00"&gt;0&lt;/font&gt; 0 0 0 0 0 ] &lt;font style="background-color: #ffff00"&gt;同时可以从票箱数组里取出6的票数0,即桶号&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;拉选票的过程&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;首先6出列开始拉选票,6的票箱是0号,6对其它所有数字说,谁比我小或与我相等,就给我投票,不然揍你&lt;/p&gt;  &lt;p&gt;于是,2 4 1 5 分别给6投票,放入0号票箱,6得四票&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;票箱数组[ 4 0 0 0 0 0 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;接下来2开始拉选票,对其它人说,谁比我小,谁投我票,不然弄你!于是1投了一票,其他人比2大不搭理,心想你可真二&lt;/p&gt;  &lt;p&gt;于是2从1那得到一票&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;票箱数组[ 4 1 0 0 0 0 ]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;再然后是,&lt;/p&gt;  &lt;p&gt;4得到2和1的投票,共计两票&lt;/p&gt;  &lt;p&gt;1得到0票,没人投他&lt;/p&gt;  &lt;p&gt;5得到2,4,1投的三张票&lt;/p&gt;  &lt;p&gt;9是最大,得到所有人(自己除外)的投票,共计5票(数组长度-1票)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;投票完毕时的状态是这样&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;票箱数组[ 4 1 2 0 3 5 ]&lt;/p&gt;  &lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;入桶的过程&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;投票过程结束,每人都拥有自己的票数,桶数组说,&lt;u&gt;看好你自己的票数,进入与你票数相等的桶&lt;/u&gt;,GO&lt;/p&gt;  &lt;p&gt;6共计5票,进入5号桶&lt;/p&gt;  &lt;p&gt;2得1票,进入1号桶,有几票就进几号桶&lt;/p&gt;  &lt;p&gt;4两票,进2号桶,5三票进3号桶,9有5票,进5号桶&lt;/p&gt;  &lt;p&gt;待排数组[ 6 2 4 1 5 9 ]&lt;/p&gt;  &lt;p&gt;票箱数组[ 4 1 2 0 3 5 ]&lt;/p&gt;  &lt;p&gt;-----------------------&lt;/p&gt;  &lt;p&gt;入桶前 [ &lt;font style="background-color: #ffff00"&gt;0&lt;/font&gt; 1 2 3 4 5 ] //里边的数字表示桶编号&lt;/p&gt;  &lt;p&gt;入桶后 [&lt;font style="background-color: #ffff00"&gt; 1&lt;/font&gt; 2 4 5 6 9 ] //1有0票,进的0号桶&lt;/p&gt;  &lt;p&gt;排序完毕,顺序输出即可[ 1 2 4 5 6 9]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;可以看到,数字越大票数越多,9得到除自己外的所有人的票,5票,票数最多所以9最大,&lt;/p&gt;  &lt;p&gt;每个人最多拥有[数组长度减去自己]张票&lt;/p&gt;  &lt;p&gt;1票数最少,所以1是最小的数,&lt;/p&gt;  &lt;p&gt;计数排序同时兼有&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260267.html"&gt;桶排&lt;/a&gt;的高效和&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260270.html"&gt;快排&lt;/a&gt;的霸道,&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;完成代码如下&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;var unsorted = new int[] { 6, 2, 4, 1, 5, 9 };&amp;#160; //待排数组&lt;/p&gt;  &lt;p&gt;var ballot = new int[unsorted.Length];&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //票箱数组&lt;/p&gt;  &lt;p&gt;var bucket = new int[unsorted.Length];&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //桶数组&lt;/p&gt;  &lt;p&gt;for (int i = 0; i &amp;lt; bucket.Length; i++)&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;//unsorted[i] = 6&lt;/p&gt;  &lt;p&gt;//ballot[i]是6的票箱,里边有4张票&lt;/p&gt;  &lt;p&gt;//bucket[ballot[i]] = unsorted[i];&lt;/p&gt;  &lt;p&gt;//bucket[4张票] = 6;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; bucket[ballot[i]] = unsorted[i];&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;for (int i = 0; i &amp;lt; bucket.Length; i++)&lt;/p&gt;  &lt;p&gt;{&lt;/p&gt;  &lt;p&gt;Console.WriteLine(bucket[i]);&lt;/p&gt;  &lt;p&gt;}&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html"&gt;返回主目录 [经典排序算法][集锦]&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kkun/aggbug/2260299.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kkun/archive/2011/11/23/2260299.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
