<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/xsl/rss.xsl" type="text/xsl" media="screen"?>
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:ppp="http://blog.sohu.com/rss/module/ppp/"
	>

	<channel>
		<title>失乐园</title>
		<link>http://voip1984.blog.sohu.com/</link>
		<description><![CDATA[飘雪的盛夏]]></description>
		<pubDate>Fri, 8 Aug 2008 14:23:04 +0800</pubDate>
		<generator>搜狐博客</generator>
		<ppp:ebi>dd098b6792</ppp:ebi>
		<image>
			<title>http://blog.sohu.com</title>
			<url>http://js.pp.sohu.com/ppp/blog/images/common/logo_150_60.gif</url>
			<link>http://blog.sohu.com/</link>
			<width>100</width>
			<height>43</height>
			<description>搜狐博客</description>
		</image>
		<item>
			<title>&#62;1</title>
			<link>http://voip1984.blog.sohu.com/96748173.html</link>
			<comments>http://voip1984.blog.sohu.com/96748173.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Fri, 8 Aug 2008 14:23:04 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/96748173.html</guid>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 07.8 : http 半封闭</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 07.10 ：目录销售加班</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 07.12 ：彩票</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 08.3 ：lua脚本GUI方案</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 08.4 ：方案续</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 08.5 ：GUI框架软件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 08.7 ：脚本空中营业厅</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自从到公司以后有七次考核大于1，除了第一次，其他六次都是文件颁布之后获得，工资按照文件应该提升两级。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以上推论是理论情况，其实文件就是p。</p>]]></description>
		</item>
		    
		
		<item>
			<title>LUA脚本不执行问题汇总（更新编辑）</title>
			<link>http://voip1984.blog.sohu.com/96392711.html</link>
			<comments>http://voip1984.blog.sohu.com/96392711.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Mon, 4 Aug 2008 20:37:57 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/96392711.html</guid>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.语法错误无法解析。可以先用编辑器编译检查一下</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.互斥调用。同一时刻脚本内两个函数同时执行调用失败。这是由于脚本中函数A调用c接口a，a又调用脚本函数B，这时候A并没有返回，同时要求B要执行，在一个顺序执行的程序里面不可能成功。之后可以考虑脚本的并行执行。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.函数不存在。返回nil。脚本函数不存在调用失败，但不会死掉。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.脚本路径错误，导致无法解析文件。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.脚本传输出错。在uclinux通过CRT的命令xrec下载会自动添加进行字节对齐，这样添加的乱码导致无法解析。自己进行字节对齐或者使用usb下载。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 总之要保证各个环节都是正确的。</p>]]></description>
		</item>
		    
		
		<item>
			<title>lua 编译到uClinux的库文件中</title>
			<link>http://voip1984.blog.sohu.com/96102135.html</link>
			<comments>http://voip1984.blog.sohu.com/96102135.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Fri, 1 Aug 2008 12:40:37 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/96102135.html</guid>
			<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先把lua原文件编译成静态库lualib.a，lua.h等三个主要头文件放到include文件夹中，链接lualib.a即可，注意-lm这个链接要放到 lualib这个库之后链接。]]></description>
		</item>
		    
		
		<item>
			<title>关于C++异常的理解 zz</title>
			<link>http://voip1984.blog.sohu.com/95813543.html</link>
			<comments>http://voip1984.blog.sohu.com/95813543.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Tue, 29 Jul 2008 10:22:53 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/95813543.html</guid>
			<description><![CDATA[潜心研究C++异常处理机制数日,有所得,与大家共享: <br /><br />C++异常处理机制核心观点: <br /><br />0.如果使用普通的处理方式:ASSERT,return等已经足够简洁明了,请不要使用异常处理机制. <br /><br />1.比C的setjump,longjump优秀. <br /><br />2.可以处理任意类型的异常. <br />&nbsp;&nbsp;你可以人为地抛出任何类型的对象作为异常. <br />&nbsp;&nbsp;throw&nbsp;100; <br />&nbsp;&nbsp;throw&nbsp;&quot;hello&quot;; <br />&nbsp;&nbsp;... <br /><br />3.需要一定的开销,频繁执行的关键代码段避免使用 <br />&nbsp;&nbsp;C++异常处理机制. <br /><br />4.其强大的能力表现在: <br />&nbsp;&nbsp;A.把可能出现异常的代码和异常处理代码隔离开,结构更清晰. <br />&nbsp;&nbsp;B.把内层错误的处理直接转移到适当的外层来处理,化简了处理&nbsp;流程.传统的手段是通过一层层返回错误码把错误处理转移到上层,上层再转移到上上层,当层数过多时将需要非常多的判断,&nbsp;以采取适当的策略. <br />&nbsp;&nbsp;C.局部出现异常时,在执行处理代码之前,会执行堆栈回退,即为所有局部对象调用析构函数,保证局部对象行为良好. <br />&nbsp;&nbsp;D.可以在出现异常时保证不产生内存泄漏.通过适当的try,catch布局,可以保证delete&nbsp;pobj;一定被执行. <br /><br />&nbsp;&nbsp;E.在出现异常时,能够获取异常的信息,指出异常原因.并可以给用户优雅的提示. <br />&nbsp;&nbsp;F.可以在处理块中尝试错误恢复.保证程序几乎不会崩溃.&nbsp;通过适当处理,即使出现除0异常,内存访问违例,也能让程序不崩溃,继续运行,这种能力在某些情况下及其重要. <br /><br />以上ABCDEF可以使你的程序更稳固,健壮,不过有时让程序崩溃似乎更容易找到原因,程序老是不崩溃,如果处理结果有问题,有时很难查找. <br /><br />5.并不是只适合于处理'灾难性的'事件.普通的错误处理也可以用异常机制来处理,不过如果将此滥用的话,可能造成程序结构混乱,因为异常处理机制本质上是程序处理流程的转移,不恰当的,过度的转移显然将造成混乱.许多人认为应该只在'灾难性的'事件上使用异常处理,以避免异常处理机制本身带来的开销,你可以认为这句话通常是对的. <br /><br />6.先让程序更脆弱,再让程序更坚强.首先,它使程序非常脆弱,稍有差错,马上执行流程跳转掉,去寻找相应的处理代码,以求适当的解决方式.很像一个人身上带着许多药品,防护工具出行,稍有头晕,马上拿出清凉油;遇到蚊子立刻拿出电蚊拍灭之. <br />WINDOWS: <br />7.将结构化异常处理结合/转换到C++异常对象,可以更好地处理WINDOWS程序出现的异常. <br />8.尽一切可能使用try,catch,而不是win32本身的结构化异常处理或者MFC中的TRY,CATCH宏.用得恰到好处,方显C++异常之美妙! ]]></description>
		</item>
		    
		
		<item>
			<title>图的广度/深度优先搜索</title>
			<link>http://voip1984.blog.sohu.com/95747284.html</link>
			<comments>http://voip1984.blog.sohu.com/95747284.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Mon, 28 Jul 2008 17:26:29 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/95747284.html</guid>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 关键：队列、生成树、三种颜色。队列用来广度扩展，颜色记录当前状态，附加数据结构形成生成树。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;算法分为三部分：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.所有节点颜色标记为white，父节点为空。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.根入队，颜色为灰。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.循环，队首出队，将队首周围白色节点涂灰、指定父节点、并且入队，队首出队并且涂黑，继续循环到全部变黑。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后搜索完毕。因为所有节点都入队过，出队过，所以最后变成全黑，只有灰色才入队。图用邻接表存储。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把队列去掉就是深度优先了。</p>]]></description>
		</item>
		    
		
		<item>
			<title>排序二叉树操作</title>
			<link>http://voip1984.blog.sohu.com/94313378.html</link>
			<comments>http://voip1984.blog.sohu.com/94313378.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Fri, 11 Jul 2008 22:28:45 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/94313378.html</guid>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 排序二叉树的创建实际是插入操作，这时候二叉树只有一个根。show操作可以采用中序遍历，删除操作一样是中序遍历。数据结构比较简单，明白原理编写代码也很容易。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 树的内容基本被我自如掌握了，cheers！</p>
<p>#include &lt;iostream&gt;<br />using namespace std ;</p>
<p>template &lt;class T&gt;<br />class stree<br />{<br />private:<br />&nbsp;struct node&nbsp; <br />&nbsp;{<br />&nbsp;&nbsp;node *toFa ;<br />&nbsp;&nbsp;node *toLeft ;<br />&nbsp;&nbsp;node *toRight ;<br />&nbsp;&nbsp;T data ;<br />&nbsp;};<br />&nbsp;node *root ;<br />public:<br />&nbsp;stree(){} ;<br />&nbsp;stree(T RootDat) ;<br />&nbsp;virtual ~stree() ;<br />&nbsp;<br />&nbsp;int BuildTree(T* array, int n) ;<br />&nbsp;int InsertNode(T dat) ;<br />&nbsp;int ShowAll() ;<br />&nbsp;int Show(node *temp) ;<br />&nbsp;int Destroy(node *temp) ;<br />protected:</p>
<p>};</p>
<p>template &lt;class T&gt;<br />stree&lt;T&gt;::stree(T RootDat)<br />{<br />&nbsp;root = new node ; <br />&nbsp;root-&gt;toFa = NULL ;<br />&nbsp;root-&gt;toLeft = NULL ;<br />&nbsp;root-&gt;toRight = NULL ;<br />&nbsp;root-&gt;data = RootDat ;<br />&nbsp;<br />}</p>
<p>template &lt;class T&gt;<br />stree&lt;T&gt;::~stree()<br />{<br />&nbsp;Destroy(root) ;<br />}</p>
<p>template &lt;class T&gt;<br />int stree&lt;T&gt;::BuildTree(T* array, int n)<br />{</p>
<p><br />&nbsp;&nbsp; return 0 ;<br />}</p>
<p>template &lt;class T&gt;<br />int stree&lt;T&gt;::InsertNode(T dat)<br />{<br />&nbsp;node * x = root ;<br />&nbsp;while (1)<br />&nbsp;{<br />&nbsp;&nbsp;if (dat &gt;= x-&gt;data)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;if (x-&gt;toLeft == NULL)&nbsp;//左子树空则插入<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toLeft = new node ;<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toLeft-&gt;toFa = x ;<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toLeft-&gt;data = dat ;<br />&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;&quot;Insert!!&quot; ;<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toLeft-&gt;toLeft = NULL ;<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toLeft-&gt;toRight = NULL ;<br />&nbsp;&nbsp;&nbsp;&nbsp;break ;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else&nbsp; //非空则需要递归<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;x = x-&gt;toLeft ;<br />&nbsp;&nbsp;&nbsp;&nbsp;continue ;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else&nbsp;//右子树 同左子树<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;if (x-&gt;toRight == NULL)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toRight = new node ;<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toRight-&gt;toFa = x ;<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toRight-&gt;data = dat ;<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toRight-&gt;toLeft = NULL ;<br />&nbsp;&nbsp;&nbsp;&nbsp;x-&gt;toRight-&gt;toRight = NULL ;<br />&nbsp;&nbsp;&nbsp;&nbsp;break ;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;x = x-&gt;toRight ;<br />&nbsp;&nbsp;&nbsp;&nbsp;continue ;<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;return 0 ;<br />}<br />template &lt;class T&gt;<br />int stree&lt;T&gt;::Show(node *temp) //中序遍历<br />{<br />&nbsp;cout&lt;&lt;&quot; &quot;&lt;&lt;temp-&gt;data ;<br />&nbsp;if (temp-&gt;toLeft != NULL)<br />&nbsp;{<br />&nbsp;&nbsp;Show(temp-&gt;toLeft) ;<br />&nbsp;}<br />&nbsp;if (temp-&gt;toRight != NULL)<br />&nbsp;{<br />&nbsp;&nbsp;Show(temp-&gt;toRight) ;<br />&nbsp;}<br />&nbsp;return 0 ;<br />}</p>
<p>template &lt;class T&gt;<br />int stree&lt;T&gt;::ShowAll()<br />{<br />&nbsp;return Show(root) ;<br />}</p>
<p>template &lt;class T&gt;<br />int stree&lt;T&gt;::Destroy(node *temp)&nbsp;//一样是遍历<br />{<br />&nbsp;if (temp-&gt;toLeft != NULL)<br />&nbsp;{<br />&nbsp;&nbsp;Destroy(temp-&gt;toLeft) ;<br />&nbsp;}<br />&nbsp;if (temp-&gt;toRight != NULL)<br />&nbsp;{<br />&nbsp;&nbsp;Destroy(temp-&gt;toRight) ;<br />&nbsp;}<br />&nbsp;cout&lt;&lt;&quot;delete &quot;&lt;&lt;temp-&gt;data ;<br />&nbsp;delete temp ;<br />&nbsp;return 0 ;<br />}</p>
<p><br />void main()<br />{<br />&nbsp;stree&lt;int&gt;tr(2) ;<br />&nbsp;tr.InsertNode(3) ;<br />&nbsp;tr.InsertNode(1) ;<br />&nbsp;tr.InsertNode(32) ;<br />&nbsp;tr.InsertNode(34) ;<br />&nbsp;tr.InsertNode(30) ;<br />&nbsp;tr.ShowAll() ;<br />}</p>]]></description>
		</item>
		    
		
		<item>
			<title>栈</title>
			<link>http://voip1984.blog.sohu.com/93895745.html</link>
			<comments>http://voip1984.blog.sohu.com/93895745.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Mon, 7 Jul 2008 14:26:54 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/93895745.html</guid>
			<description><![CDATA[<p>#include &lt;iostream&gt;<br />using namespace std ;</p>
<p>// 栈</p>
<p>template &lt;class T&gt;<br />class stack<br />{<br />public:<br />&nbsp;stack(int size) ;<br />&nbsp;virtual ~stack() ;<br />&nbsp;int push(T item) ;<br />&nbsp;T pop() ;<br />&nbsp;int leftsize() ;<br />&nbsp;T show(int n) ;<br />protected:<br />private:<br />&nbsp;int s_size ;<br />&nbsp;int s_used ;<br />&nbsp;T* st ;<br />};</p>
<p>template &lt;class T&gt;<br />stack&lt;T&gt;::stack(int size)<br />{<br />&nbsp;s_size = size ;<br />&nbsp;s_used = 0 ;<br />&nbsp;st = new T[size] ;<br />}</p>
<p>template &lt;class T&gt;<br />stack&lt;T&gt;::~stack()<br />{<br />&nbsp;delete []st ;<br />&nbsp;cout&lt;&lt;&quot;in ~stack()&quot;&lt;&lt;endl ;<br />}</p>
<p><br />template &lt;class T&gt;<br />int stack&lt;T&gt;::push(T item)<br />{<br />&nbsp;if (s_used == s_size)<br />&nbsp;{<br />&nbsp;&nbsp;return -1 ;<br />&nbsp;}<br />&nbsp;st[s_used++] = item ;<br />&nbsp;return 0 ;<br />}</p>
<p>template &lt;class T&gt;<br />T stack&lt;T&gt;::pop()<br />{<br />&nbsp;return st[--s_used] ;<br />}</p>
<p>template &lt;class T&gt;<br />int stack&lt;T&gt;::leftsize()<br />{<br />&nbsp;return s_size - s_used ;<br />}</p>
<p>template &lt;class T&gt;<br />T stack&lt;T&gt;::show(int n)<br />{<br />&nbsp;if (n&lt;=s_used)<br />&nbsp;{<br />&nbsp;&nbsp;return st[n] ;<br />&nbsp;}<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;return st[0];<br />&nbsp;}<br />}</p>
<p>void main()<br />{<br />&nbsp;stack&lt;int&gt;s(10) ;&nbsp;<br />&nbsp;s.push(1) ;<br />&nbsp;s.push(2) ;<br />&nbsp;s.push(3) ;<br />&nbsp;cout&lt;&lt;s.show(0) ;<br />&nbsp;cout&lt;&lt;s.show(1) ;<br />&nbsp;cout&lt;&lt;s.show(2) ;<br />&nbsp;cout&lt;&lt;s.pop() ;<br />&nbsp;cout&lt;&lt;s.leftsize() ;</p>
<p>}</p>]]></description>
		</item>
		    
		
		<item>
			<title>快速排序</title>
			<link>http://voip1984.blog.sohu.com/93745979.html</link>
			<comments>http://voip1984.blog.sohu.com/93745979.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Sat, 5 Jul 2008 14:41:05 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/93745979.html</guid>
			<description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 快速排序分两个步骤：1.分队，以某个元素为标准左边比ta小，右边比ta大；2.递归，两边继续分。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
<p>#include &lt;iostream&gt;</p>
<p>using namespace std ;</p>
<p>template &lt;class T&gt;<br />class QuikSort<br />{<br />&nbsp;public:<br />&nbsp;&nbsp;QuikSort(){} ;<br />&nbsp;&nbsp;virtual ~QuikSort(){} ;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;int QuikPartition(T* Array, int nLower, int nUpper) ;<br />&nbsp;&nbsp;int DoSort(T *array , int p , int r) ;<br />&nbsp;protected:<br />&nbsp;private:<br />&nbsp;&nbsp;<br />};</p>
<p><br />template &lt;class T&gt;<br />int QuikSort&lt;T&gt;::QuikPartition(T* Array, int nLower, int nUpper)<br />{<br />&nbsp;int nLeft = nLower + 1;<br />&nbsp;T Pivot = Array[nLower];<br />&nbsp;<br />&nbsp;int nRight = nUpper;<br />&nbsp;<br />&nbsp;T Swap;<br />&nbsp;while (nLeft &lt;= nRight)<br />&nbsp;{<br />&nbsp;&nbsp;while (nLeft &lt;= nRight &amp;&amp; Array[nLeft]&lt;= Pivot)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;nLeft = nLeft + 1;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;while (nLeft &lt;= nRight &amp;&amp; Array[nRight] &gt;Pivot)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;nRight = nRight - 1;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;if (nLeft &lt; nRight)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;Swap = Array[nLeft];<br />&nbsp;&nbsp;&nbsp;Array[nLeft] = Array[nRight];<br />&nbsp;&nbsp;&nbsp;Array[nRight] = Swap;<br />&nbsp;&nbsp;&nbsp;nLeft = nLeft + 1;<br />&nbsp;&nbsp;&nbsp;nRight = nRight - 1;<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;<br />&nbsp;Swap = Array[nLower];<br />&nbsp;Array[nLower] = Array[nRight];<br />&nbsp;Array[nRight] = Swap;<br />&nbsp;return nRight;<br />&nbsp;<br />}</p>
<p>&nbsp;</p>
<p>template &lt;class T&gt;<br />int QuikSort&lt;T&gt;::DoSort(T *array , int p , int r)<br />{<br />&nbsp;if (p &lt; r)<br />&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;int j = QuikPartition(array , p , r ) ;<br />&nbsp;&nbsp;DoSort(array, p , j-1) ;<br />&nbsp;&nbsp;DoSort(array, j+1 , r) ;<br />&nbsp;&nbsp;return 0 ;<br />&nbsp;}<br />&nbsp;else<br />&nbsp;{<br />&nbsp;&nbsp;return -1 ;<br />&nbsp;}<br />}</p>
<p>int main()<br />{<br />&nbsp;QuikSort&lt;int &gt;q ; <br />&nbsp;&nbsp;&nbsp; int&nbsp;a[8] = {5,31,2,6,4,31,3,7} ;<br />&nbsp;<br />&nbsp;q.DoSort(a, 0 ,7) ;<br />&nbsp;<br />&nbsp;for (int k = 0 ; k&lt;8 ; k++)<br />&nbsp;{<br />&nbsp;&nbsp;cout&lt;&lt;&quot; &quot;&lt;&lt;a[k] ;<br />&nbsp;}<br />&nbsp;<br />&nbsp;return 0 ;<br />}</p>]]></description>
		</item>
		    
		
		<item>
			<title>堆排序</title>
			<link>http://voip1984.blog.sohu.com/93683926.html</link>
			<comments>http://voip1984.blog.sohu.com/93683926.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Fri, 4 Jul 2008 17:32:34 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/93683926.html</guid>
			<description><![CDATA[<div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将无序数组看成完全二叉树，1.在这个二叉树上建立堆；2.去头剩下部分看成新数组重建堆&mdash;&mdash;去下来的头依次有序。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12,32,1,3,6看成二叉树</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;建堆</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp; 6</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 去头32，剩下 12，1，3，6看成二叉树</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 12</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3</p>
<p>&nbsp;&nbsp;&nbsp; 6</p>
<p>&nbsp;&nbsp;&nbsp; 建堆</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 12</p>
<p>&nbsp;&nbsp;&nbsp; &nbsp; 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3</p>
<p>&nbsp;&nbsp; 1</p>
<p>&nbsp;&nbsp;&nbsp;之后同上。</p>
<p>&nbsp;&nbsp; 代码如下，不消费多于空间，完全在原有空间上操作。</p>
<p>#include &lt;iostream&gt;<br />using namespace std ;</p>
<p>template &lt;class T&gt;<br />class HeapSort<br />{<br />&nbsp;public:<br />&nbsp;&nbsp;HeapSort(){} ;<br />&nbsp;&nbsp;virtual ~HeapSort(){} ;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;int BuildHeap(T *array, int n) ;<br />&nbsp;&nbsp;int DoSort(T *array , int n) ;<br />&nbsp;protected:<br />&nbsp;private:</p>
<p>};</p>
<p><br />template &lt;class T&gt;<br />int HeapSort&lt;T&gt;::BuildHeap(T *array,int n)<br />{<br />&nbsp;for(int i =n ; i&gt;1 ; i--)<br />&nbsp;{<br />&nbsp;&nbsp;if (array[i-1]&gt; array[i/2-1])<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;T temp = array[i/2-1] ;<br />&nbsp;&nbsp;&nbsp;array[i/2-1] = array[i-1] ;<br />&nbsp;&nbsp;&nbsp;array[i-1] = temp ;<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;return 0 ;<br />}<br />template &lt;class T&gt;<br />int HeapSort&lt;T&gt;::DoSort(T *array , int n)<br />{<br />&nbsp;T *p = array ;<br />&nbsp;for (int i = n ; i &gt;0 ; i--)<br />&nbsp;{&nbsp;&nbsp;<br />&nbsp;&nbsp;BuildHeap(p++ , i) ;<br />&nbsp;}<br />&nbsp;return 0 ;<br />}</p>
<p>int main()<br />{<br />&nbsp;HeapSort&lt;int&gt; h ;<br />&nbsp;int a[5] = {12,32,1,3,6} ;</p>
<p>&nbsp;h.DoSort(a,5) ;<br />&nbsp;for (int i =0 ; i&lt;5 ; i++)<br />&nbsp;{<br />&nbsp;&nbsp;cout&lt;&lt;a[i]&lt;&lt;&quot; &quot; ;<br />&nbsp;}</p>
<p>&nbsp;return 0 ;<br />}</p>
<div></div></div>]]></description>
		</item>
		    
		
		<item>
			<title>好的算法是何其重要</title>
			<link>http://voip1984.blog.sohu.com/81207332.html</link>
			<comments>http://voip1984.blog.sohu.com/81207332.html#comment</comments>
			<dc:creator>失乐园</dc:creator>
			<pubDate>Sat, 8 Mar 2008 18:54:56 +0800</pubDate>
			<guid>http://voip1984.blog.sohu.com/81207332.html</guid>
			<description><![CDATA[<p>//再看《计算机程序设计艺术》好书！盖茨说：如果你能看懂，来我微软工作吧！</p>
<p>#include &lt;iostream&gt;<br />using namespace std;</p>
<p>class SharedSon<br />{<br />public:<br />&nbsp;SharedSon(int a , int b )<br />&nbsp;{<br />&nbsp;&nbsp;fatherA = a ; <br />&nbsp;&nbsp;fatherB = b ;<br />&nbsp;} ;<br />&nbsp;~SharedSon(){} ;<br />&nbsp;int GetMaxSon() ;<br />&nbsp;int GetMaxSonQ() ;<br />protected:<br />private:<br />&nbsp;int fatherA ;<br />&nbsp;int fatherB ;<br />};</p>
<p>int SharedSon:: GetMaxSon()<br />{<br />&nbsp;int Son = 0 , count = 0;<br />&nbsp;Son = (fatherA&lt;=fatherB)? fatherA : fatherB ;<br />&nbsp;<br />&nbsp;while (Son &gt; 0)<br />&nbsp;{<br />&nbsp;&nbsp;if (fatherA%Son == 0 &amp;&amp; fatherB%Son == 0)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;break ;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;count++ ;<br />&nbsp;&nbsp;Son-- ;<br />&nbsp;}<br />&nbsp;cout&lt;&lt;&quot;count = &quot;&lt;&lt;count&lt;&lt;endl ;<br />&nbsp;return Son ;<br />}</p>
<p>int SharedSon::GetMaxSonQ()<br />{<br />&nbsp;int Son = 0 ,A = (fatherA&lt;=fatherB)? fatherA : fatherB ,<br />&nbsp;&nbsp; B = (fatherA&gt;=fatherB)? fatherA : fatherB, count = 0 ;</p>
<p>&nbsp;while (1)<br />&nbsp;{<br />&nbsp;&nbsp;Son = B%A ;<br />&nbsp;&nbsp;if (Son != 0)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;B = A ;<br />&nbsp;&nbsp;&nbsp;A = Son ;<br />&nbsp;&nbsp;&nbsp;count++ ;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;else<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;break ;<br />&nbsp;&nbsp;}<br />&nbsp;}<br />&nbsp;cout&lt;&lt;&quot;count(Q) = &quot;&lt;&lt;count&lt;&lt;endl ;</p>
<p>&nbsp;return A ;<br />}<br />void main()<br />{<br />&nbsp;SharedSon a(23, 140) ;<br />&nbsp;cout&lt;&lt;a.GetMaxSon()&lt;&lt;endl ;<br />&nbsp;cout&lt;&lt;endl&lt;&lt;a.GetMaxSonQ()&lt;&lt;endl ;<br />}</p>]]></description>
		</item>
		    
		
	</channel>
</rss>
