﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-随感而发</title><link>http://www.cppblog.com/shongbee2/</link><description>杂七杂八</description><language>zh-cn</language><lastBuildDate>Fri, 17 Apr 2026 02:04:06 GMT</lastBuildDate><pubDate>Fri, 17 Apr 2026 02:04:06 GMT</pubDate><ttl>60</ttl><item><title>时间是把杀猪刀</title><link>http://www.cppblog.com/shongbee2/archive/2011/05/20/146833.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 20 May 2011 14:11:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2011/05/20/146833.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/146833.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2011/05/20/146833.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/146833.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/146833.html</trackback:ping><description><![CDATA[嘻嘻，这次是想看看我以前记录的OpenGL学习历程，那已经是好久好久之前的事情了，发现最近的一篇是2010年12曰11日，还记得那时是因为百度空间IE访问太慢的原因，把其中的一篇转到这里了。相隔现在已经半年了。<br />他的上一篇是2009年9月24日，相隔一年多哦。。原来我还使用过 MFC使用CTreeCtrl控件。现在MFC都已经忘了是什么东西了。<br />OpenGL的学习是在2009年得4月，回想起来其实那个时候已经不用OpenGL很久了，可能遇见到会忘的一干二净，所以记录下来做个纪念。<br />我也发现就那个月更新的随笔最多了，嘻嘻。<br /><br />没有想到这个账号还能给我保留到现在，不过我应该也不会继续写博客，随笔什么的了。人心老了，也没有时间写，更重要的是不知道写什么？DX的基础学习，（网上一大把，学都没有学好，写有什么用。），图形学的相关算法学习，（这个我都不是很了解哦），OGRE学习，这个也是半吊子。<br />设计模式？（都忘了有哪些设计模式了），从零开始写图形引擎？（你算哪根葱啊），把项目的问题贴上来(这个可是具体的项目诶。) 主要是心态老了，人变浮躁了。 <br /><br />看了以前的计划，看看现状，除了叹息，还是叹息。。<br /><br />走了。。。<img src ="http://www.cppblog.com/shongbee2/aggbug/146833.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2011-05-20 22:11 <a href="http://www.cppblog.com/shongbee2/archive/2011/05/20/146833.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>API回调成员函数 THUNK</title><link>http://www.cppblog.com/shongbee2/archive/2010/12/11/136157.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sat, 11 Dec 2010 08:14:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2010/12/11/136157.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/136157.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2010/12/11/136157.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/136157.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/136157.html</trackback:ping><description><![CDATA[想来想去还是罗嗦一下，<font face="Times New Roman">API</font><font face=宋体>只能回调全局函数，而我们有时候希望他能回调成员函数。最常用的就是</font><font face="Times New Roman">Timmer</font><font face=宋体>和窗口回调。要实现这个需求，就会用到</font><font face="Times New Roman">THUNK</font><font face=宋体>技术。</font><font face="Times New Roman">THUNK </font><font face=宋体>我查了一下是：</font><font face="Times New Roman">thunk&nbsp;&nbsp;</font><font face=宋体>名词 </font><font face="Times New Roman">n.&nbsp;&nbsp;</font><font face=宋体>铮</font><font face="Times New Roman">;</font><font face=宋体>铛</font><font face="Times New Roman">,</font><font face=宋体>锵 。跟这个完全没有关系嘛（看来英文太烂是坏处还是挺多的）。学习了一下之后，我理解的意思就是：狸猫换太子。替换原来意图，转调我们需要的地址。</font><span></span>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>Thunk<font face=宋体>的原理其实说起来很简单：巧妙的将数据段的几个字节的数据设为特殊的值，然后告诉系统，这几个字节的数据是代码（即将一个函数指针指向这几个字节的第一个字节），让系统来执行</font></span><span>。</span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>让<font face="Times New Roman">API</font><font face=宋体>回调成员函数：</font></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>直接用成员函数的地址传给作为<font face="Times New Roman">API</font><font face=宋体>的回调函数显然会编译出错的，原因是他们的调用规则不一致，</font><font face="Times New Roman"><a title="c++" href="www.cppblog.com/shongbee2/" >C++</a></font><font face=宋体>编译器不允许这样做。具体可以参考：</font></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span><a href="http://hi.baidu.com/shongbee2/blog/item/7867de9744e3c26155fb9611.html"><span class=15><u><font color=#0000ff>http://hi.baidu.com/shongbee2/blog/item/7867de9744e3c26155fb9611.html</font></u></span></a></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>而刚好<font face="Times New Roman">THUNK</font><font face=宋体>技术就是让数据段当做代码断用，如果我把回调函数地址用一个数据段给他，然后在数据段中再跳转到成员函数的地址。这样就可以间接的调用成员函数了。不错，我就是学习的这个方法。嘻嘻。。</font></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>大致方向知道了，还得了解一下细节，函数调用的规则：</span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>建议看一下</span><span><a href="http://hi.baidu.com/shongbee2/blog/item/7867de9744e3c26155fb9611.html"><span class=15><u><font color=#0000ff>http://hi.baidu.com/shongbee2/blog/item/7867de9744e3c26155fb9611.html</font></u></span></a></span><span>（也就是上一篇文章啦。）需要注意的：调用者怎么处理栈，被调用者怎么使用栈和处理栈。系统回调函数基本上都是<font face="Times New Roman">_stdcall</font><font face=宋体>的调用方式，成员函数是</font><font face="Times New Roman">__thiscall</font><font face=宋体>的调用方式。他们的区别为：</font></span><span></span></p>
<table style="PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; PADDING-RIGHT: 5.4pt; BORDER-COLLAPSE: collapse; PADDING-TOP: 0pt; mso-table-layout-alt: fixed" class=FCK__ShowTableBorders>
    <tbody>
        <tr style="HEIGHT: 15.85pt">
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; BORDER-LEFT: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 144.15pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: rgb(0,0,0) 0.5pt solid; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-left-alt: 0.5000pt solid rgb(0,0,0); mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=192>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>关键字</span><span></span></p>
            </td>
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 53.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: rgb(0,0,0) 0.5pt solid; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=71>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>堆栈清除</span><span></span></p>
            </td>
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 234.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: rgb(0,0,0) 0.5pt solid; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=312>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>参数传递</span><span></span></p>
            </td>
        </tr>
        <tr style="HEIGHT: 13.6pt">
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; BORDER-LEFT: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 144.15pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-left-alt: 0.5000pt solid rgb(0,0,0); mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=192>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>__stdcall</span><span></span></p>
            </td>
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 53.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=71>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>被调用者</span><span></span></p>
            </td>
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 234.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=312>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>将参数倒序压入堆栈</span><span>(</span><span>自右向左</span><span>)</span><span></span></p>
            </td>
        </tr>
        <tr style="HEIGHT: 14.4pt">
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; BORDER-LEFT: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 144.15pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-left-alt: 0.5000pt solid rgb(0,0,0); mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=192>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>__thiscall</span><span></span></p>
            </td>
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 53.8pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=71>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>被调用者</span><span></span></p>
            </td>
            <td style="BORDER-BOTTOM: rgb(0,0,0) 0.5pt solid; PADDING-BOTTOM: 0pt; PADDING-LEFT: 5.4pt; WIDTH: 234.4pt; PADDING-RIGHT: 5.4pt; BORDER-TOP: medium none; BORDER-RIGHT: rgb(0,0,0) 0.5pt solid; PADDING-TOP: 0pt; mso-border-right-alt: 0.5000pt solid rgb(0,0,0); mso-border-top-alt: 0.5000pt solid rgb(0,0,0); mso-border-bottom-alt: 0.5000pt solid rgb(0,0,0)" vAlign=top width=312>
            <p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>压入堆栈，</span><span>this</span><span>指针保存在 <font face="Times New Roman">ECX </font><font face=宋体>寄存器中</font></span><span></span></p>
            </td>
        </tr>
    </tbody>
</table>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>发现他们唯一不同的就是<font face="Times New Roman">__thiscall</font><font face=宋体>把</font><font face="Times New Roman">this</font><font face=宋体>指针保存到了</font><font face="Times New Roman">ECX</font><font face=宋体>的寄存器中。其他都是一样的。这种情况我们就方便了，我们只需在他调用我们的时候，我们吧</font><font face="Times New Roman">this</font><font face=宋体>指针保存到</font><font face="Times New Roman">ECX</font><font face=宋体>，然后跳转到期望的成员函数地址就可以了。</font></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>//<font face=宋体>我认为思路就是这样了。接下来是实现，贴源代码：</font></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>#include "stdafx.h"<br>#include "wtypes.h" </span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>#include &lt;iostream&gt;<br>using namespace std; </span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>typedef void (*FUNC)(DWORD dwThis);<br>typedef int (_stdcall *FUNC1)(int a, int b);<br>#pragma pack(push,1)<br>typedef struct tagTHUNK<br>{<br>&nbsp;&nbsp;&nbsp; BYTE&nbsp;&nbsp;&nbsp; bMovEcx;&nbsp;&nbsp; //MOVE ECX 将this指针移动到ECX的指令<br>&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp; dwThis;&nbsp;&nbsp; // this&nbsp;&nbsp; this指针的地址<br>&nbsp;&nbsp;&nbsp; BYTE&nbsp;&nbsp;&nbsp; bJmp;&nbsp;&nbsp;&nbsp; //jmp&nbsp;&nbsp; 跳转指令<br>&nbsp;&nbsp;&nbsp; DWORD&nbsp;&nbsp;&nbsp; dwRealProc; //proc offset 跳转偏移</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>&nbsp;&nbsp;&nbsp; void Init(DWORD proc,void* pThis)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp; bMovEcx = 0xB9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //注释见下面说明^_^<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwThis = (DWORD)pThis;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bJmp = 0xE9;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwRealProc = DWORD((INT_PTR)proc - ((INT_PTR)this+sizeof(THUNK)));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FlushInstructionCache(GetCurrentProcess(),this,sizeof(THUNK));<br>&nbsp;&nbsp;&nbsp; }<br>}THUNK;<br>#pragma pack(pop) <br>/**************************************************************************************<br>void Init(DWORD proc,void* pThis)里面的说明：<br>0xB9 为MOVE ECX的指令， 0xE9 跳转的指令，这段初始化表示：<br>0013FF54 mov&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ecx, ptr [this] <br>0013FF59 jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwRealProc<br>这个单步一下便知。<br>下面那个API ：FlushInstructionCache，查MSDN，表示刷新缓存，<br>因为我们修改了数据，建议他重新载入一下。</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>我最不能理解的是jmp的偏移是为什么是那样计算，所以这里也着重说明一下：<br>jmp跳转的是当前指令地址的偏移，我们参数中proc是实际函数的地址，我们需要<br>把他转为jmp的偏移: 实际函数地址-jmp指令地址。<br>实际函数地址就是proc,jmp地址就是((INT_PTR)this+sizeof(THUNK))，所以就得到<br>dwRealProc = DWORD((INT_PTR)proc - ((INT_PTR)this+sizeof(THUNK)));这行代码<br>还有一点，我对汇编不了解，下面是YY：为什么不是：<br>dwRealProc = DWORD((INT_PTR)proc - ((INT_PTR)this+sizeof(THUNK)) - sizeof(dwRealProc))<br>直观上看jmp地址不是：this + sizeof(bMoveEcx) + sizeof(dwThis) + sizeof(bJmp)吗？<br>也就是((INT_PTR)this+sizeof(THUNK)) - sizeof(dwRealProc) 啊。可是我看了一下编译的结果，<br>发现0013FF59 jmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dwRealProc 是一行的，也就是jmp地址实际就是:<br>((INT_PTR)this+sizeof(THUNK)) 这个地址。经过测试也没有问题，我就认为是这样了，不对的还<br>忘多指出。嘻嘻。<br>还有一个容易混淆的，就是我们会传入this指针，在dwRealProc里面和 FlushInstructionCache<br>里面都用到了this。这里要注意啦：如果你不知道传入的参数this指针和使用的这个this的话，你就该<br>重新复习一下C++基础了。解释一下：传入的this指针变为参数pThis，使用的this是THUNK的this。^_^<br>*****************************************************************************************/</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>template&lt;typename dst_type,typename src_type&gt;<br>dst_type pointer_cast(src_type src)<br>{<br>return *static_cast&lt;dst_type*&gt;( static_cast&lt;void*&gt;(&amp;src) );<br>}</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>class Test<br>{<br>public:<br>int m_nFirst;<br>&nbsp;&nbsp;&nbsp; THUNK m_thunk;<br>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_nTest; </span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>&nbsp;&nbsp;&nbsp; //构造函数中初始化为3，仅为测试，以便查看外面的方法JmpedTest是否可以正确取得这个值<br>&nbsp;&nbsp;&nbsp; Test() : m_nTest(3),m_nFirst(4)<br>&nbsp;&nbsp;&nbsp; {} </span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>&nbsp;&nbsp;&nbsp; void TestThunk()<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp; m_thunk.Init(pointer_cast&lt;int&gt;(&amp;Test::Test2),this);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FUNC1 f = (FUNC1)&amp;m_thunk;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; f(1,2);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "Test::TestThunk()" &lt;&lt; endl;<br>&nbsp;&nbsp;&nbsp; } </span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>int Test2(int a, int b)<br>{<br>&nbsp;&nbsp; cout &lt;&lt; a &lt;&lt; " " &lt;&lt; b &lt;&lt; " " &lt;&lt; m_nFirst &lt;&lt; " " &lt;&lt; m_nTest &lt;&lt; endl;<br>&nbsp;&nbsp; return 0;<br>}<br>}; </span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>int _tmain(int argc, _TCHAR* argv[])<br>{<br>&nbsp;&nbsp;&nbsp; Test t;<br>&nbsp;&nbsp;&nbsp; t.TestThunk();<br>&nbsp;&nbsp;&nbsp; system("pause");<br>&nbsp;&nbsp;&nbsp; return 0;<br>}</span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>总结：</span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>这个明显是暴力的去强制跳转，直接把指令写入到数据段中，增加了出错的风险，而且可移植性变的很差。所以尽量少用。</span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>要弄清楚函数调用规则和堆栈的平衡。如果你用<font face="Times New Roman">_cedcl</font><font face=宋体>规则的函数调用的话，就会出错啦。</font></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>学习代码中只是处理了简单的情况，还有几种方式，例如不是强制跳转，而是用<font face="Times New Roman">call</font><font face=宋体>的方式调用，也可以实现。对于其他的函数规则例如成员函数是</font><font face="Times New Roman">_stdcall</font><font face=宋体>，他是参数压栈的，这个</font><font face="Times New Roman">THUNK</font><font face=宋体>的写法也不一样了。。</font></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>因为数据段中用到了<font face="Times New Roman">this,</font><font face=宋体>函数回调中会用到它，所以一定要保证这个</font><font face="Times New Roman">this</font><font face=宋体>有效。特别是窗口回调函数，如果释放了变量，但是窗口没有销毁是很容易出问题的。窗口回调函数也有比较喜欢用一个静态的分配器，通过窗口识别，把他分配到不同的成员处理函数中的方式。</font></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>这个只是初学，原因是发现<font face="Times New Roman">ATL</font><font face=宋体>的窗口回调是这样做的。觉得很神奇，所以学习了一下，有不对的地方还望多多指教。嘻嘻。。。</font></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span>找到的资料：</span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span><a href="http://www.vckbase.com/document/viewdoc/?id=1821"><span class=15><u><font color=#0000ff>http://www.vckbase.com/document/viewdoc/?id=1821</font></u></span></a></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span><a href="http://www.codeproject.com/KB/cpp/GenericThunks.aspx"><span class=15><u><font color=#0000ff>http://www.codeproject.com/KB/cpp/GenericThunks.aspx</font></u></span></a></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span><a href="http://blog.csdn.net/superarhow/archive/2006/07/10/898261.aspx"><span class=15><u><font color=#0000ff>http://blog.csdn.net/superarhow/archive/2006/07/10/898261.aspx</font></u></span></a></span><span></span></p>
<p style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt" class=p0><span><a href="http://www.cnblogs.com/homeofish/archive/2009/02/20/1395208.html"><span class=15><u><font color=#0000ff>http://www.cnblogs.com/homeofish/archive/2009/02/20/1395208.html</font></u></span></a></span><span></span></p><img src ="http://www.cppblog.com/shongbee2/aggbug/136157.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2010-12-11 16:14 <a href="http://www.cppblog.com/shongbee2/archive/2010/12/11/136157.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】MFC使用CTreeCtrl控件</title><link>http://www.cppblog.com/shongbee2/archive/2009/09/24/97096.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Thu, 24 Sep 2009 01:47:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/09/24/97096.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/97096.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/09/24/97096.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/97096.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/97096.html</trackback:ping><description><![CDATA[<table style="width: 100%; table-layout: fixed;">
    <tbody>
        <tr>
            <td>
            <div id="blog_text" class="cnt">
            <p>转自：忘记具体网址了。。。。。</p>
            <p style="line-height: 18pt; margin-top: 5pt; margin-bottom: 15pt;" class="p0"><span style="color: #353535; font-size: 10.5pt;">首先<font face="Times New Roman">,</font><font face="宋体">我们要创建一个</font></span><span><a  href="http://action.utops.cc/click.jsp?adsId=168&amp;adsLeagueId=5&amp;adsUserId=1&amp;siteId=406&amp;siteLeagueId=5&amp;siteUserId=384&amp;scId=2&amp;adsType=6&amp;prices=1.31&amp;checkCode=b7081fe123&amp;click=1&amp;url=http://www.totole.com.cn&amp;v=0&amp;keyword=%u57FA%u672C&amp;s=http://www.6to23.com/tech/btkf/kfpt/vbmfc/200604/44208.html&amp;rn=795387"><span style="color: #353535; font-size: 10.5pt;">基本</span></a></span><span style="color: #353535; font-size: 10.5pt;">对话框的<font face="Times New Roman">MFC</font></span><span><a  href="http://action.utops.cc/click.jsp?adsId=249&amp;adsLeagueId=5&amp;adsUserId=188&amp;siteId=406&amp;siteLeagueId=5&amp;siteUserId=384&amp;scId=2&amp;adsType=2&amp;prices=1.12&amp;checkCode=b0c779f1a3&amp;click=1&amp;url=http://www.sasacity.com/sports-brand-60.html/?utm_source=hp_banner&amp;v=0&amp;keyword=%u5DE5%u7A0B&amp;s=http://www.6to23.com/tech/btkf/kfpt/vbmfc/200604/44208.html&amp;rn=357592"><span style="color: #353535; font-size: 10.5pt;">工程</span></a></span><span style="color: #353535; font-size: 10.5pt;">MFC_TreeCRTL<font face="宋体">（名字随便给一个）。然后在资源视图中插入两个</font><font face="Times New Roman">Dialog</font><font face="宋体">，</font><font face="Times New Roman">ID</font><font face="宋体">分别为</font><font face="Times New Roman">IDD_DIALOG11</font><font face="宋体">和</font><font face="Times New Roman">IDD_DIALOG211</font><font face="宋体">，都更改</font><font face="Times New Roman">Style</font><font face="宋体">属性为</font><font face="Times New Roman">Child,Border</font><font face="宋体">属性为</font><font face="Times New Roman">None,</font><font face="宋体">为它们建立两个类，分别命名为</font><font face="Times New Roman">Cdialog11</font><font face="宋体">和</font><font face="Times New Roman">Cdialog211</font><font face="宋体">，并在</font><font face="Times New Roman">MFC_TreeCRTLDlg.CPP</font><font face="宋体">文件中包含</font><font face="Times New Roman">dialog11.h</font><font face="宋体">和</font><font face="Times New Roman">dialog211.h</font><font face="宋体">两个头文件。再导入几个资源图标作为树形控件节点的图标及装饰面板。最后在主面板上添加一个</font><font face="Times New Roman">CTreeCtrl</font><font face="宋体">控件</font><font face="Times New Roman">,ID</font><font face="宋体">为</font></span><span><a  href="http://action.utops.cc/click.jsp?adsId=166&amp;adsLeagueId=5&amp;adsUserId=1&amp;siteId=406&amp;siteLeagueId=5&amp;siteUserId=384&amp;scId=2&amp;adsType=7&amp;prices=1.3&amp;checkCode=e13a3de176&amp;click=1&amp;url=http://www.totole.com.cn&amp;v=0&amp;keyword=%u9ED8%u8BA4&amp;s=http://www.6to23.com/tech/btkf/kfpt/vbmfc/200604/44208.html&amp;rn=110619"><span style="color: #353535; font-size: 10.5pt;">默认</span></a></span><span style="color: #353535; font-size: 10.5pt;">，并在<font face="Times New Roman">ClassWizard</font><font face="宋体">中添加它的一个变量，命名为</font><font face="Times New Roman">m_mytree</font><font face="宋体">。</font></span><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;">　　接着，我们进行具体代码编写。</span><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;">　　我们必须在<font face="Times New Roman">CMFC_TreeCRTLDlg</font><font face="宋体">类中加入这些变量和函数</font></span><span style="color: #353535; font-size: 10.5pt;"><br></span></p>
            <p>
            <table style="padding: 0pt 5.4pt; border-collapse: collapse;" class="FCK__ShowTableBorders" align="center">
                <tbody>
                    <tr>
                        <td style="padding: 0pt 5.4pt; background: #e3e3e3 none repeat scroll 0% 0%; width: 366.9pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" width="489" valign="center">
                        <p style="background: #e3e3e3 none repeat scroll 0% 0%; line-height: 18pt; margin-top: 0pt; margin-bottom: 0pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="p0"><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">CDialog
                        * m_treePages[2];</span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">CString
                        node_name;</span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">BOOL
                        InitMytree();</span></p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </p>
            <p style="line-height: 18pt; margin-top: 5pt; margin-bottom: 15pt;" class="p0"><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;">　　我们还要在<font face="Times New Roman">CMFC_TreeCRTLDlg</font><font face="宋体">类的构造函数中为</font><font face="Times New Roman">m_treePages[2]</font><font face="宋体">分配空间， </font><font face="Times New Roman">m_treePages[0]=new Cdialog11;</font></span><span style="color: #353535; font-size: 10.5pt;"><br></span></p>
            <p>
            <table style="padding: 0pt 5.4pt; border-collapse: collapse;" class="FCK__ShowTableBorders" align="center">
                <tbody>
                    <tr>
                        <td style="padding: 0pt 5.4pt; background: #e3e3e3 none repeat scroll 0% 0%; width: 432.4pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" width="576" valign="center">
                        <p style="background: #e3e3e3 none repeat scroll 0% 0%; line-height: 18pt; margin-top: 0pt; margin-bottom: 0pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="p0"><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">m_treePages[1]=new
                        Cdialog211;</span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">InitMytree()<font face="宋体">函数为</font><font face="Times New Roman">m_mytree</font><font face="宋体">的初始化过程 </font><font face="Times New Roman">BOOL
                        CMFC_TreeCRTLDlg::InitMytree()</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">{</span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">节点的图标</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">int i=0;</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">int i_count=2;</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">载入图标</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">HICON icon[4];</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">icon[0]=AfxGetApp()-&gt;LoadIcon
                        (IDI_ICON6);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">icon[1]=AfxGetApp()-&gt;LoadIcon
                        (IDI_ICON7);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">创建图像列表控件</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">CImageList *m_imagelist=new
                        CImageList;</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_imagelist-&gt;Create(16,16,0,7,7);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_imagelist-&gt;SetBkColor
                        (#ffffff);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">for(int n=0;n&lt;i_count;n++)</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">{</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　　<font face="Times New Roman">m_imagelist-&gt;Add(icon[n]); //</font><font face="宋体">把图标载入图像列表控件</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">}</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_mytree.SetImageList(m_imagelist,TVSIL_NORMAL);
                        //</font><font face="宋体">为</font><font face="Times New Roman">m_mytree</font><font face="宋体">设置一个图像列表，使</font><font face="Times New Roman">CtreeCtrl</font><font face="宋体">的节点显示不同的图标</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_mytree.SetBkColor(#00faff);//</font><font face="宋体">设置</font><font face="Times New Roman">m_mytree</font><font face="宋体">的背景色</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">创建节点</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">父节点</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">HTREEITEM
                        root0=m_mytree.InsertItem("Dialog1",0,1,TVI_ROOT,TVI_LAST);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">HTREEITEM
                        root1=m_mytree.InsertItem("Dialog2",0,1,TVI_ROOT,TVI_LAST);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">一层子节点</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">HTREEITEM sub_son0=m_mytree.InsertItem("Dialog
                        1-1",0,1,root0,TVI_LAST);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">HTREEITEM sub_son1=m_mytree.InsertItem("Dialog
                        2-1",0,1,root1,TVI_LAST);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">二层孙子节点</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">HTREEITEM sub_m_son0=m_mytree.InsertItem("Dialog
                        2-1-1",0,1,sub_son1,TVI_LAST);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">建立节点对应的</font><font face="Times New Roman">Dialog</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_treePages[0]-&gt;Create(IDD_DIALOG11,this);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_treePages[1]-&gt;Create(IDD_DIALOG211,this);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_treePages[0]-&gt;ShowWindow(SW_SHOW);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_treePages[1]-&gt;ShowWindow(SW_HIDE);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">把</font><font face="Times New Roman">Dialog</font><font face="宋体">移到合适位置</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">CRect m_rect;</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">GetClientRect(m_rect);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_rect.left=200;</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_treePages[0]-&gt;MoveWindow(m_rect);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">m_treePages[1]-&gt;MoveWindow(m_rect);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">return true;</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">}</span></p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </p>
            <p style="line-height: 18pt; margin-top: 5pt; margin-bottom: 15pt;" class="p0"><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;">　　始初化完成后，我们要添加<font face="Times New Roman">CTreeCtrl</font><font face="宋体">的消息响应事件，这样才能让它按我们的要求起作用。我们打开</font><font face="Times New Roman">Class
            Wizard</font><font face="宋体">点选</font><font face="Times New Roman">IDC_TREE1</font><font face="宋体">添加</font><font face="Times New Roman">TVN_SELCHANGED</font><font face="宋体">消息，并在消息响应函数中写入代码。</font></span><span style="color: #353535; font-size: 10.5pt;"><br></span></p>
            <p>
            <table style="padding: 0pt 5.4pt; border-collapse: collapse;" class="FCK__ShowTableBorders" align="center">
                <tbody>
                    <tr>
                        <td style="padding: 0pt 5.4pt; background: #e3e3e3 none repeat scroll 0% 0%; width: 399.15pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" width="532" valign="center">
                        <p style="background: #e3e3e3 none repeat scroll 0% 0%; line-height: 18pt; margin-top: 0pt; margin-bottom: 0pt; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;" class="p0"><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">void
                        CMFC_TreeCRTLDlg::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)</span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">{</span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">NM_TREEVIEW* pNMTreeView =
                        (NM_TREEVIEW*)pNMHDR;</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">// TODO: Add your control notification handler code
                        here</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">UpdateData(true);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">node_name=m_mytree.GetItemText(pNMTreeView-&gt;itemNew.hItem);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">在标题栏显示节点信息</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">SetWindowText(node_name);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">//</font><font face="宋体">切换面板</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">if(node_name=="Dialog 1-1"){</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　　<font face="Times New Roman">m_treePages[0]-&gt;ShowWindow(SW_SHOW);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　　<font face="Times New Roman">m_treePages[1]-&gt;ShowWindow(SW_HIDE);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">}</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">else if(node_name=="Dialog 2-1-1"){</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　　<font face="Times New Roman">m_treePages[0]-&gt;ShowWindow(SW_HIDE);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　　<font face="Times New Roman">m_treePages[1]-&gt;ShowWindow(SW_SHOW);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">}</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">UpdateData(false);</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">　<font face="Times New Roman">*pResult = 0;</font></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;"><br></span><span style="background: #e3e3e3 none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous; color: #353535; font-size: 10.5pt;">}</span></p>
                        </td>
                    </tr>
                </tbody>
            </table>
            </p>
            <p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;">　　最后<font face="Times New Roman">,</font><font face="宋体">我们在 </font><font face="Times New Roman">CMFC_TreeCRTLDlg::OnInitDialog()</font><font face="宋体">初始化函数里调用</font><font face="Times New Roman">InitMytree()</font><font face="宋体">函数。程序运行效果：</font></span><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;"><a  href="http://hiphotos.baidu.com/shongbee2/pic/item/f8498bf01cf06083a50f521d.jpg" target="_blank"><img  src="http://www.cppblog.com/images/cppblog_com/shongbee2/DialogShow1.png" border="0"><br></a></span></p>
            <p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;">图一</span></p>
            <p style="margin-top: 0pt; margin-bottom: 0pt;" class="p0"><span style="color: #353535; font-size: 10.5pt;">（为什么百度会把图片质量变低，该死的缩水图。。。。）<br></span><span style="color: #353535; font-size: 10.5pt;"><br></span><span style="color: #353535; font-size: 10.5pt;">　　到这里为止，我们就把一个<font face="Times New Roman">Dialog</font><font face="宋体">粘贴到了主</font><font face="Times New Roman">Dialog</font><font face="宋体">上了，通过</font><font face="Times New Roman">CTreeCtrl</font><font face="宋体">控件的节点的变化，让不同的</font><font face="Times New Roman">Dialog</font><font face="宋体">交替地粘贴在主</font><font face="Times New Roman">Dialog</font><font face="宋体">上，从而方便于我们只用少数的窗口，调用更多的功能模块，不必再为每个模块都作为弹出窗口，而显得繁杂。 </font></span></p>
            </div>
            </td>
        </tr>
    </tbody>
</table>
<br><img src ="http://www.cppblog.com/shongbee2/aggbug/97096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-09-24 09:47 <a href="http://www.cppblog.com/shongbee2/archive/2009/09/24/97096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>诡异的强制类型转换操作符</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/28/91524.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Tue, 28 Jul 2009 12:03:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/28/91524.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/91524.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/28/91524.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/91524.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/91524.html</trackback:ping><description><![CDATA[<p>最近在学习中，看到了一段很诡异的代码。<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">CComptr</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">IDispatch</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;ptrDisp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>IDispatch</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pDisp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ptrDisp;</span></div>
<p>对此很是疑惑，为什么两个完全不同的类型可以无差别的转换。<br>猜测1：<br>认为IDispatch重载了赋值操作符。0.1秒的时间否定。他只是一个接口，定义很明确的4的方法。不可能。由于不相信，还特意去看了一下他的接口定义。彻底死心。<br>猜测2.<br>CComptr&lt;IDispatch&gt;重载了赋值操作符。但是想来想去应该和他的重载没有关系，因为这个操作在他的左边，和他的赋值操作符全然没有关系。不信之，进去看了一下，并且把重载给注释掉，结果还是能编译成功，彻底确信不是赋值的作用。<br><br>真相：<br>终于拿出杀手锏，F11，单步，哈哈，进去发现原来有：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&nbsp;T</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">throw</span><span style="COLOR: #000000">()<br><img id=Codehighlighter1_30_45_Open_Image onclick="this.style.display='none'; Codehighlighter1_30_45_Open_Text.style.display='none'; Codehighlighter1_30_45_Closed_Image.style.display='inline'; Codehighlighter1_30_45_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_30_45_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_45_Closed_Text.style.display='none'; Codehighlighter1_30_45_Open_Image.style.display='inline'; Codehighlighter1_30_45_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_30_45_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_30_45_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;p;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<p>这段代码。哈哈。。问了大牛知道是重载强制转换。哈哈。纵欲知道原因了。。。<br>自己也模仿写了一下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;A1&nbsp;<br><img id=Codehighlighter1_10_97_Open_Image onclick="this.style.display='none'; Codehighlighter1_10_97_Open_Text.style.display='none'; Codehighlighter1_10_97_Closed_Image.style.display='inline'; Codehighlighter1_10_97_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10_97_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_97_Closed_Text.style.display='none'; Codehighlighter1_10_97_Open_Image.style.display='inline'; Codehighlighter1_10_97_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10_97_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_10_97_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">()<br><img id=Codehighlighter1_38_53_Open_Image onclick="this.style.display='none'; Codehighlighter1_38_53_Open_Text.style.display='none'; Codehighlighter1_38_53_Closed_Image.style.display='inline'; Codehighlighter1_38_53_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_38_53_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_38_53_Closed_Text.style.display='none'; Codehighlighter1_38_53_Open_Image.style.display='inline'; Codehighlighter1_38_53_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_38_53_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_38_53_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">()&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">const</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_80_95_Open_Image onclick="this.style.display='none'; Codehighlighter1_80_95_Open_Text.style.display='none'; Codehighlighter1_80_95_Closed_Image.style.display='inline'; Codehighlighter1_80_95_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_80_95_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_80_95_Closed_Text.style.display='none'; Codehighlighter1_80_95_Open_Image.style.display='inline'; Codehighlighter1_80_95_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_80_95_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_80_95_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_111_179_Open_Image onclick="this.style.display='none'; Codehighlighter1_111_179_Open_Text.style.display='none'; Codehighlighter1_111_179_Closed_Image.style.display='inline'; Codehighlighter1_111_179_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_111_179_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_179_Closed_Text.style.display='none'; Codehighlighter1_111_179_Open_Image.style.display='inline'; Codehighlighter1_111_179_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_111_179_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_111_179_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;A1&nbsp;aa1;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;aa1;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p>编译成功，爽。。。。<br><br></p><img src ="http://www.cppblog.com/shongbee2/aggbug/91524.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-28 20:03 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/28/91524.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>万恶的listView控件</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/28/91513.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Tue, 28 Jul 2009 09:28:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/28/91513.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/91513.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/28/91513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/91513.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/91513.html</trackback:ping><description><![CDATA[C++里面也有listView控件，叫list Control。很好很强大哦。MFC对应的类为CListCtrl.。ATL/WTL对应的类为CListViewCtrl 。<br>用起来很不错。可惜响应消息就麻烦很多。一个右键弹出菜单，居然弄的要用钩子。之后才发现是消息响应错了。是应该响应<br>OnRClick类似的消息吧(忘了)，LButtonDown什么的就被想获得了。。还有什么OwnerData什么的又是一大堆的消息，响应的都郁闷。然后我的策略就是直接用他自己的。哈哈。一个消息不响应。。。。<br>等有时间了，一定要学一个listView控件的专题。(C++的)。。一定要努力学习。。加油。。。<img src ="http://www.cppblog.com/shongbee2/aggbug/91513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-28 17:28 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/28/91513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】基于Thunk实现的类成员消息处理函数</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/23/90908.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Thu, 23 Jul 2009 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/23/90908.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/90908.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/23/90908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/90908.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/90908.html</trackback:ping><description><![CDATA[<a href="http://blog.csdn.net/JerKii/archive/2006/04/07/654188.aspx">http://blog.csdn.net/JerKii/archive/2006/04/07/654188.aspx</a><br>由于比较多，直接贴链接了。<br>郁闷的是我死活没有弄成功。。唉，只有继续加油咯。。。<img src ="http://www.cppblog.com/shongbee2/aggbug/90908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-23 11:35 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/23/90908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符编码转换，为什么我的ICONV不能用啊？</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/10/89730.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 10 Jul 2009 07:23:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/10/89730.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/89730.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/10/89730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/89730.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/89730.html</trackback:ping><description><![CDATA[<p>哎，找了半天转换，找到了ICONV，据说是跨平台的，很牛。下载的libxml也需要到他，也下载了他的库，由于libxml转换编码格式。</p>
<p>可是用来用去都不正确。网上去找的资料都是一个版本的，我最后的代码为：</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;charToUtf_8(IN&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;strSrc,&nbsp;IN&nbsp;OUT&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;pstrDst)<br><img id=Codehighlighter1_63_841_Open_Image onclick="this.style.display='none'; Codehighlighter1_63_841_Open_Text.style.display='none'; Codehighlighter1_63_841_Closed_Image.style.display='inline'; Codehighlighter1_63_841_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_63_841_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_63_841_Closed_Text.style.display='none'; Codehighlighter1_63_841_Open_Image.style.display='inline'; Codehighlighter1_63_841_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_63_841_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_63_841_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">u2g(in_utf8,strlen(in_utf8),out,OUTLEN);</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;iconv_t&nbsp;cd&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;iconv_open(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">utf-8</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ANSI_X3.4-1986</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">iconv_t&nbsp;cd&nbsp;=&nbsp;iconv_open("utf-8",&nbsp;"CP_ACP");</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(cd&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;(iconv_t)(</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">))<br><img id=Codehighlighter1_236_255_Open_Image onclick="this.style.display='none'; Codehighlighter1_236_255_Open_Text.style.display='none'; Codehighlighter1_236_255_Closed_Image.style.display='inline'; Codehighlighter1_236_255_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_236_255_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_236_255_Closed_Text.style.display='none'; Codehighlighter1_236_255_Open_Image.style.display='inline'; Codehighlighter1_236_255_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;</span><span id=Codehighlighter1_236_255_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_236_255_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;size_t&nbsp;ilen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;::strlen(strSrc)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;size_t&nbsp;olen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ilen&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">inbuf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[ilen];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">outbuf&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[olen];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;memset(inbuf,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;ilen);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;memset(outbuf,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;olen);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;inbuf;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;outbuf;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;memcpy(inbuf,&nbsp;strSrc,&nbsp;ilen);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;size_t&nbsp;ret&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;iconv(cd,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #0000ff">in</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ilen,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #0000ff">out</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">olen);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">下面这种方式会出错，为什么?<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">size_t&nbsp;ret&nbsp;=&nbsp;iconv(cd,&nbsp;&amp;inbuf,&nbsp;&amp;ilen,&nbsp;&amp;outbuf,&nbsp;&amp;olen);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;if&nbsp;(ret&nbsp;==&nbsp;(size_t)(-1))<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;cerr&nbsp;&lt;&lt;&nbsp;"iconv&nbsp;error"&nbsp;&lt;&lt;&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;}<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;else<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;outbuf&nbsp;&lt;&lt;&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;}</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;delete[]&nbsp;inbuf;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;delete&nbsp;outbuf;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;iconv_close(cd);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>&nbsp;</p>
<p>当然这些代码是从网上拷贝下来再改的。编译通过，运行就不行了。</p>
<p>后来我放弃了。直接用windows的方法。（还好我是在windows上开发）</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;CharToUtf_8(IN&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;strSrc,&nbsp;IN&nbsp;OUT&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;pstrDst)<br><img id=Codehighlighter1_63_459_Open_Image onclick="this.style.display='none'; Codehighlighter1_63_459_Open_Text.style.display='none'; Codehighlighter1_63_459_Closed_Image.style.display='inline'; Codehighlighter1_63_459_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_63_459_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_63_459_Closed_Text.style.display='none'; Codehighlighter1_63_459_Open_Image.style.display='inline'; Codehighlighter1_63_459_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_63_459_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_63_459_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;assert(pstrDst);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MultiByteToWideChar(CP_ACP,NULL,&nbsp;strSrc,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;NULL,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;WCHAR</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pwchTemp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;WCHAR[nSize];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;nSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MultiByteToWideChar(CP_ACP,NULL,&nbsp;strSrc,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;pwchTemp,&nbsp;nSize);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;nSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;WideCharToMultiByte(CP_UTF8,&nbsp;NULL,&nbsp;pwchTemp,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;NULL,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pstrDst&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">[nSize];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;nSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;WideCharToMultiByte(CP_UTF8,&nbsp;NULL,&nbsp;pwchTemp,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">pstrDst,&nbsp;nSize,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p>&nbsp;</p>
<p>这样就可以饿了。呵呵。。哎。。。。<br>不过挺郁闷的，为什么ICONV不能用啊，有高手指点一下吗？</p><img src ="http://www.cppblog.com/shongbee2/aggbug/89730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-10 15:23 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/10/89730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VS2008设置内存断点</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/08/89571.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Wed, 08 Jul 2009 13:55:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/08/89571.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/89571.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/08/89571.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/89571.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/89571.html</trackback:ping><description><![CDATA[<p>菜鸟的我居然不知道什么是内存断点。<br>自己理解一下：内存断点就是当某个内存改变的时候会断下来的。就跟程序断点一样，运行到那里就断下来一样。<br>VS2008怎么设置内存断点呢。我打开内存监视器。按F9是没有效果的，给出错误提示。后来通过网上搜了才知道原来是这样设置的哦！哈哈。<br>截图什么的就算了，因为我觉得我对VS2008的界面应该还是比较了解的吧。哈哈<br><br>1.内存断点只能是在程序调试运行的时候才能设置的。这跟普通的代码断点不一样。<br>2.进入调试状态，（按F5啦），设置一个要监控的内存的变量哪里设置断点先断下来。（我是这样做的）。<br>3.断下来之后，哈哈，关键：点击菜单栏的Debug-&gt;new Breakpoint-&gt; new DataBreakPoint。这就是设置内存的断点啦。<br>4 。点击之后会出来一个设置内存断点的对话框，填好好断的内存就可以了。上面的地址是可以直接用变量名加取地址符的。例如&amp;a，其他的应该就好理解，监控的长度和语言。设置就OK了，哈哈。<br>今天有学了一招，以后如果想知道内存什么时候被改变，俺就不怕啦。。。</p><img src ="http://www.cppblog.com/shongbee2/aggbug/89571.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-08 21:55 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/08/89571.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发发牢骚</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/08/89568.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Wed, 08 Jul 2009 13:43:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/08/89568.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/89568.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/08/89568.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/89568.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/89568.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;哈哈，今天一天过去了，总的来说很爽。任务基本完成了。希望继续努力吧。&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天上来逛的时候看到某人发了《我的程序员之路4》在精华贴。看了他的博文，不知道为什么，我觉得我有点羡慕他，如果用贬义词的话就是我有点嫉妒他，不过，像他那样周围的人的技术都不如他这样的高手和境遇我是肯定不会遇到的，也就不会嫉妒啦，反而我觉得这样很惨的，因为高处不胜寒嘛。我羡慕的是他的入门，他能有那么一个耐心的引导者，而我就不同了，我现在是刚刚入门，我对什么都是一知半解，不能领悟其真谛。不过我就惨了，很多不懂吧，想问问人，总是得到一个很强悍的回答：你不会去网上找啊！。这句万能答案让我哭笑不得，而且后来还冠于学习能力差，独立完成任务能力差的评价。看来这个世界好问并不是一件好事啊。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;要知道其实我能问出口，也要做心理斗争的，特别是被这个答案雷过之后。我问其实已经示努力的想过怎么去解决，而解决不了了，还有很多是因为我没有方向，不知道如何入手，所以才想请教大牛们指点迷津的，虽然我知道你们很忙，可我也知道我的问题对你们来说只是一个不是问题的问题，最多耽误你们一两分钟的时间，给我一个方向我就能继续走了。可是，他们很多时候这点时间和机会都不会给我，而是给我那样雷人的回答。我呢，也只有承受，技不如人，你还有什么怨言吗？<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 应该是幸运吧，他们没有直接告诉我答案，不过我还是采用了他们的答案，虽然还是不知道怎么做，不过我会换着关键字，换着思路去寻找解决方案。由于任务的压力和淘汰的压力吧，我总是能在紧要关头找到或意外发现我想要的线索，甚至就是整个资料内容。助我一臂之力。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 应该谢谢他们，虽然可能我走了一些弯路，虽然可能浪费了一些时间，但是，现在的我练就了一身打不倒的自信和勇气，当我遇到困难时，我相信我能找到好的方法，我相信我一定能克服。当我都快放弃的时候，我就会说，这个对他们都是小case，难道就把我难道，我会继续的寻找。呵呵，毕竟不是真的难题，所以答案总是会出现的。然后让我得到了很高的成就感。哈哈。。爽。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;我想&nbsp;大家都会用网络查资吧，网络也给我帮了很大的忙，真的是一个很好的老师，呵呵，我希望我也能把我遇到的问题，解决的方案放上来，也能为网络增加点有用的资料吧。呵呵。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 继续加油。。<img src ="http://www.cppblog.com/shongbee2/aggbug/89568.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-08 21:43 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/08/89568.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>gtest学习文章</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/08/89531.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Wed, 08 Jul 2009 02:28:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/08/89531.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/89531.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/08/89531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/89531.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/89531.html</trackback:ping><description><![CDATA[<p>现在要用gtest框架写单元测试。所以网上找了一个学习资料（或是教程）呵呵，因为我的基础很烂，直接看官方的文档可能不是很会。谢谢提供者。<br>文章地址：<a href="http://www.cnblogs.com/coderzh/archive/2009/04/06/1426758.html">http://www.cnblogs.com/coderzh/archive/2009/04/06/1426758.html</a><br>这是一个系列的，希望早日看完。哈哈，加油。。。</p><img src ="http://www.cppblog.com/shongbee2/aggbug/89531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-08 10:28 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/08/89531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自留地</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/03/89151.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 03 Jul 2009 04:44:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/03/89151.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/89151.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/03/89151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/89151.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/89151.html</trackback:ping><description><![CDATA[本来想开个博客能和大家分享的，可是自己不争气，没有能坚持下来。现在就变成了我的自留地了，呵呵，把一些更杂七杂八的东西也发上来。呵呵。留个纪念吧。以后再来看看至少知道我遇到过哪些问题，这也是开博客的初衷之一。总之，还是加油。。加油。。。<img src ="http://www.cppblog.com/shongbee2/aggbug/89151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-03 12:44 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/03/89151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>电脑坏了之维修</title><link>http://www.cppblog.com/shongbee2/archive/2009/07/03/89150.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 03 Jul 2009 04:40:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/03/89150.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/89150.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/03/89150.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/89150.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/89150.html</trackback:ping><description><![CDATA[<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">不知道是为什么，跟我接近的东西总是容易坏，虽然在很久很久以前已经失去了好奇心，不会再乱动，乱拆了。可是即使完全按照要求来使用也总是错误百出。我的电脑也不例外。</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">以前买了一个电脑，用不了多久就开始出问题了，开始是开不了机，听到<font face="Times New Roman">3</font><font face=宋体>长响，我哪里知道是什么原因，更不敢拆来修，等了一个晚上，第二天又好了。不过好景不长，过了没几天有出现了，我继续等啊，等了一天还是不见好，就只有请人帮忙了，后来得知是内存有问题，我还以为还换内存呢。不过幸运的是，把内存拔出来擦擦，然后再插进去又好了。。原来有这种事。。呵呵。。就这样，我度过了</font><font face="Times New Roman">N</font><font face=宋体>久的拔内存，擦内存的简单维修工作，不过说实话，这招真的很管用。（对了，现象是，什么都不出现。。一个黑屏）。</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">然后到了公司，给我了一台工作机，现在居然也有问题了。他的现象是可以进入开始的自检，但是不能跳过。所以可能是某个硬件坏了。我无语，自己更不敢修了。遂等了<font face="Times New Roman">N</font><font face=宋体>久，信息部的大牛来修了。。他来，发现这个问题之后，就把电池给扣出来了，名曰：放电。过了几秒放进去后又好了。。真是神招，我还没有用过。呵呵。不过过了两天又出现这个问题了。</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">漫长的等待之后，他把显卡拆了，然后又<font face="Times New Roman">OK</font><font face=宋体>了。。</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">幸运的是他告诉我：一般电脑开不了机其实并不是硬件真的坏了，有可能是接触不良等原因引起的，所以把对应的硬件拔出来，看看，然后在好的装回去就好了。对他的教导我也是有所感触。呵呵。不只是电脑方面。</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">所以我总结电脑修理的步骤：内存试试<font face="Times New Roman">-&gt;</font><font face=宋体>放电</font><font face="Times New Roman">-&gt;</font><font face=宋体>显卡</font><font face="Times New Roman">-&gt;</font><font face=宋体>其他部件拆下试试。</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">虽然很傻的方式，不过迄今为止我都还觉得这些招挺管用的。哈哈。。</span></p>
<!--endfragment--><img src ="http://www.cppblog.com/shongbee2/aggbug/89150.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-03 12:40 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/03/89150.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转】OPENFILENAME </title><link>http://www.cppblog.com/shongbee2/archive/2009/07/02/89092.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Thu, 02 Jul 2009 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/07/02/89092.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/89092.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/07/02/89092.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/89092.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/89092.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: OPENFILENAME&nbsp;&nbsp;The&nbsp;OPENFILENAME&nbsp;structure&nbsp;contains&nbsp;information&nbsp;that&nbsp;the&nbsp;GetOpenFileName&nbsp;and&nbsp;GetSaveFileName&nbsp;functions&nbsp;use&nbsp;to&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/07/02/89092.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/89092.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-07-02 17:27 <a href="http://www.cppblog.com/shongbee2/archive/2009/07/02/89092.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【12】——纪念一下</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/08/82287.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 08 May 2009 15:42:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/08/82287.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/82287.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/08/82287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/82287.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/82287.html</trackback:ping><description><![CDATA[<p>终于把那本教程看完了，感觉不错。虽然很多还不理解。非常感谢大牛们的帮助。谢谢。<br>下一步计划是继续看NEHE的教程，也会去看一下大牛推荐的红宝书，可惜我这里没有电子版。更没有纸版。不过我相信我会找到的。也顺求一下，如果您有电子版。可以发到我的邮箱里吗？如果有下载连接，可以回复一下下载地址码？谢谢您们了。<br>给自己鼓励一下，还是坚持下来了。我想，入门之后也许路会好走很多。呵呵，加油。。</p><img src ="http://www.cppblog.com/shongbee2/aggbug/82287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-08 23:42 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/08/82287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>除法散列发解决碰撞的散列表</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/06/82085.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Wed, 06 May 2009 12:19:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/06/82085.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/82085.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/06/82085.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/82085.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/82085.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了除法散列法解决散列表的碰撞。他的基本思路为：1.&nbsp;用一个阀值作为除数，对要求散列值的key除以他，得到的结果就是该key要存放的位置。2.&nbsp;注意的是，这个除数一定要选择好，不能太大，太大浪费了空间。也不能太小，太小碰撞太严重。一般选择里2的p次幂最远的质数。因为这样的话散列的效果可能更好。具体论证我也不清楚。3.&nbsp;空间的选择，只要除数定下来之后，一般空间就是...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/05/06/82085.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/82085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-06 20:19 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/06/82085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【11】——融合学习</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/05/81994.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Tue, 05 May 2009 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/05/81994.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81994.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/05/81994.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81994.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81994.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了a的透明通道，书上说是融合，反正一个意思。奉上源代码：#pragma&nbsp;comment(lib,&nbsp;"glaux.lib")#include&nbsp;"gl\glaux.h"#include&nbsp;&lt;gl\glut.h&gt;void&nbsp;display(void){&nbsp;&nbsp;&nbsp;&nbsp;glClear(GL_COLOR_B...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/05/05/81994.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81994.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-05 23:48 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/05/81994.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求2-nMax的素数</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/04/81870.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Mon, 04 May 2009 11:42:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/04/81870.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81870.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/04/81870.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81870.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81870.html</trackback:ping><description><![CDATA[<p>今天本来打算学习散列表的，看了一下，发现你面很多地方用到素数，所以就写了一个求素数的程序，很有大一的感觉。呵呵。奉上源代码：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;g_nPrime[</span><span style="COLOR: #000000">100000</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">求nMax范围类最多不超过nLen个素数，把结果保存在nPrime中。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回素数的个数</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;GetPrimeNumbers(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nPrime[],&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nMax)<br><img id=Codehighlighter1_165_740_Open_Image onclick="this.style.display='none'; Codehighlighter1_165_740_Open_Text.style.display='none'; Codehighlighter1_165_740_Closed_Image.style.display='inline'; Codehighlighter1_165_740_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_165_740_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_740_Closed_Text.style.display='none'; Codehighlighter1_165_740_Open_Image.style.display='inline'; Codehighlighter1_165_740_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_165_740_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_165_740_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果空间为0，或nMax小于2则返回没有求道素数。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nMax&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">||</span><span style="COLOR: #000000">&nbsp;nLen&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_225_240_Open_Image onclick="this.style.display='none'; Codehighlighter1_225_240_Open_Text.style.display='none'; Codehighlighter1_225_240_Closed_Image.style.display='inline'; Codehighlighter1_225_240_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_225_240_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_225_240_Closed_Text.style.display='none'; Codehighlighter1_225_240_Open_Image.style.display='inline'; Codehighlighter1_225_240_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_225_240_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_225_240_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nNumber&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始个数为1个(即2这个素数)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;nPrime[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nPos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">是除比较时候的最大下标。这样可以节省一小小时间</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nMax&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;nNumber&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nLen;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_392_720_Open_Image onclick="this.style.display='none'; Codehighlighter1_392_720_Open_Text.style.display='none'; Codehighlighter1_392_720_Closed_Image.style.display='inline'; Codehighlighter1_392_720_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_392_720_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_392_720_Closed_Text.style.display='none'; Codehighlighter1_392_720_Open_Image.style.display='inline'; Codehighlighter1_392_720_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_392_720_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_392_720_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">遍历要除的素数，如果都不能整除，则i为素数。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;nPos;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br><img id=Codehighlighter1_464_516_Open_Image onclick="this.style.display='none'; Codehighlighter1_464_516_Open_Text.style.display='none'; Codehighlighter1_464_516_Closed_Image.style.display='inline'; Codehighlighter1_464_516_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_464_516_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_464_516_Closed_Text.style.display='none'; Codehighlighter1_464_516_Open_Image.style.display='inline'; Codehighlighter1_464_516_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_464_516_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_464_516_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(i&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;nPrime[j]&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_496_512_Open_Image onclick="this.style.display='none'; Codehighlighter1_496_512_Open_Text.style.display='none'; Codehighlighter1_496_512_Closed_Image.style.display='inline'; Codehighlighter1_496_512_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_496_512_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_496_512_Closed_Text.style.display='none'; Codehighlighter1_496_512_Open_Image.style.display='inline'; Codehighlighter1_496_512_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_496_512_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_496_512_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;nPos&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">都不能整除，i是素数</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_551_612_Open_Image onclick="this.style.display='none'; Codehighlighter1_551_612_Open_Text.style.display='none'; Codehighlighter1_551_612_Closed_Image.style.display='inline'; Codehighlighter1_551_612_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_551_612_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_551_612_Closed_Text.style.display='none'; Codehighlighter1_551_612_Open_Image.style.display='inline'; Codehighlighter1_551_612_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_551_612_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_551_612_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nPrime[nNumber]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">保存到nprime中，并个数加1</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">nNumber;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(j&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;nPos&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;nPrime[nPos]&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;nPrime[nPos])<br><img id=Codehighlighter1_674_717_Open_Image onclick="this.style.display='none'; Codehighlighter1_674_717_Open_Text.style.display='none'; Codehighlighter1_674_717_Closed_Image.style.display='inline'; Codehighlighter1_674_717_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_674_717_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_674_717_Closed_Text.style.display='none'; Codehighlighter1_674_717_Open_Image.style.display='inline'; Codehighlighter1_674_717_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_674_717_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_674_717_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果该数位最大下标对应值的平方，最大下标加1</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">nPos;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;nNumber;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_753_944_Open_Image onclick="this.style.display='none'; Codehighlighter1_753_944_Open_Text.style.display='none'; Codehighlighter1_753_944_Closed_Image.style.display='inline'; Codehighlighter1_753_944_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_753_944_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_753_944_Closed_Text.style.display='none'; Codehighlighter1_753_944_Open_Image.style.display='inline'; Codehighlighter1_753_944_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_753_944_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_753_944_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">测试一把，不过比较花，改为1000就不错。呵呵。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nNumber&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;GetPrimeNumbers(g_nPrime,&nbsp;</span><span style="COLOR: #000000">100000</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">100000000</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nNumber;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_880_913_Open_Image onclick="this.style.display='none'; Codehighlighter1_880_913_Open_Text.style.display='none'; Codehighlighter1_880_913_Closed_Image.style.display='inline'; Codehighlighter1_880_913_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_880_913_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_880_913_Closed_Text.style.display='none'; Codehighlighter1_880_913_Open_Image.style.display='inline'; Codehighlighter1_880_913_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_880_913_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_880_913_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;g_nPrime[i]);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">为什么这么增加一个最大求余地下标，主要是为了提高点效率。如果一个数字在一个素数的<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">平方范围内，则只需要对比他小的素数求余就可以了。这样可以提高<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">一点点时间。我看了一下120万中有10万个素数，如果加上最大求余下标，就只需到1000<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这样的话可以省略掉1000-1百万之间的所有素数求余，也就是省略了大概9万个数据。很客观的。</span></div><img src ="http://www.cppblog.com/shongbee2/aggbug/81870.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-04 19:42 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/04/81870.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用数组模拟指针和对象</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/04/81861.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Mon, 04 May 2009 10:37:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/04/81861.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81861.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/04/81861.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81861.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81861.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了用没有指针和结构体的情况下用数组来实现类似的操作。他的思路和指针是一样的，只不过指针指向的是地址，他指向的是数组的下标。其他方式都一样。还有就是必须要自己实现分配和释放的函数，从数组中分配对象和释放对象。也要自己维持一张空闲数据表。这也是书上的例子。废话少说，奉上源代码：#include&nbsp;&lt;stdio.h&gt;#include&nbsp;&lt;stdlib.h&g...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/05/04/81861.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81861.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-04 18:37 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/04/81861.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【10】——移动光源，光照小结</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/03/81771.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sun, 03 May 2009 06:57:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/03/81771.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81771.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/03/81771.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81771.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81771.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了移动光源，奉上源代码：#pragma&nbsp;comment(lib,&nbsp;"glaux.lib")#include&nbsp;"gl\glaux.h"#include&nbsp;&lt;gl\glut.h&gt;float&nbsp;yRot&nbsp;=&nbsp;0;unsigned&nbsp;int&nbsp;nPre&nbsp;=&nbsp;0;GLfloat&nb...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/05/03/81771.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81771.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-03 14:57 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/03/81771.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpneGL学习笔记【9】——纹理学习</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/02/81730.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sat, 02 May 2009 14:25:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/02/81730.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81730.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/02/81730.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81730.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81730.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了纹理，奉上源代码：#pragma&nbsp;comment(lib,&nbsp;"glaux.lib")#include&nbsp;"gl\glaux.h"#include&nbsp;&lt;gl\glut.h&gt;/**//*&nbsp;创建纹理&nbsp;*/#define&nbsp;ImageWidth&nbsp;64#define&nbsp;ImageHeight&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/05/02/81730.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81730.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-02 22:25 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/02/81730.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【8】——颜色材质</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/01/81656.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 01 May 2009 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/01/81656.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81656.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/01/81656.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81656.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81656.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了颜色材质：奉上源代码：#pragma&nbsp;comment(lib,&nbsp;"glaux.lib")#include&nbsp;"gl\glaux.h"#include&nbsp;&lt;gl\glut.h&gt;float&nbsp;yRot&nbsp;=&nbsp;0;unsigned&nbsp;int&nbsp;nPre&nbsp;=&nbsp;0;void&nbsp;...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/05/01/81656.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-01 23:48 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/01/81656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【7】——材质学习</title><link>http://www.cppblog.com/shongbee2/archive/2009/05/01/81645.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 01 May 2009 13:52:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/05/01/81645.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81645.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/05/01/81645.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81645.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81645.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了材质，奉上源代码：#pragma&nbsp;comment(lib,&nbsp;"glaux.lib")#include&nbsp;"gl\glaux.h"#include&nbsp;&lt;gl\glut.h&gt;float&nbsp;yRot&nbsp;=&nbsp;0;unsigned&nbsp;int&nbsp;nPre&nbsp;=&nbsp;0;void&nbsp;di...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/05/01/81645.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81645.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-05-01 21:52 <a href="http://www.cppblog.com/shongbee2/archive/2009/05/01/81645.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>链表学习--双向链表实现</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/30/81594.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Thu, 30 Apr 2009 12:25:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/30/81594.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81594.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/30/81594.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81594.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81594.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了链表的数据结构。他的主要思路为:1.&nbsp;他访问数据的方式不是数组的下标，而是他的节点的指针来访问。所以他可以更灵活的处理数据见得相关信息。不过他的速度肯定没有数组下标快的，空间也没有数组利用率高，可他的灵活性给了我们很大的方便。我们用链表的时候还是很多的。2.&nbsp;链表是用指针的指向来访问管理数据的，一个我们把数据存在一个节点里，一个节点包括：nData，节点的数据域，nN...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/04/30/81594.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81594.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-30 20:25 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/30/81594.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>队列学习--数组实现</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/29/81486.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Wed, 29 Apr 2009 12:56:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/29/81486.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81486.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/29/81486.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81486.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81486.html</trackback:ping><description><![CDATA[<p>今天学习了队列，队列的思路和栈差不多，他只是先进先出（FIFO）的方式。他的主要操作和栈有：IsEmpty判断空，EnQueue入队，(栈是push，不过没有什么大的区别)。DeQueue出队。其核心数据也是很相似，也有一个数据区域nData,不过他是队头nHand和队尾nTail。对头定位着将要出队的元素，队尾对应着入队的元素。<br>实现细节：也是为了能使操作简单一些，我们开始都从0开始，nTail指向的是入队时候数据要加的位置，也就是说他是先把该位置设置为入队的值，然后自己再加1.nData[nTail] = shuju; nTail++;这种方式。nHead指向的就是出队的位置，这样的好处就是能很快的判断队是否为空，只要nHand == nTail队就是空的了。(因为出队位置处没有数据)，这样出队也很方便，只需要得到nHead指向位置的数据，然后nHead加1就可以。<br>不过有的时候，会一边入队，一边出队，这样nTail和nHead会一直往后走，而nhead前面的区域已经自由了，没有用处，这样就浪费了空间。为了能有效地利用空间，我们可以循环用数据区域，就是当nTail 到数据区域最后的时候，我们把它回到0。这样就能很好的循环利用。不过这样就不能简单的用nTail &gt;= nLen的方式判断队是否满了，做了一个处理，如果nTai的下一个位置就是nHead的话，我们认为队满了，nTail指向的是队末要插入的位置，如果他的下一个位置为nHead的话，则说明nHead..nTail中已经存放了数据。最多只能存放nTail位置一个数据。这里我们为什么不让他多存一个数据，使nTail == nHead得时候，才认为队满呢？这样不是更高的利用空间吗？话虽这样说，不过nTail == nHead是我们判断队是否为空的标识。如果我们把nTail == nHead也作为判断队满的标识的话，就会引起歧义，所以我选择浪费一个空间，来更方便的判断队空和队满。还有注意在入队的时候要判断队是否为满，出队的时候，要判断是否为空。<br>奉上源代码：用数组实现的：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">assert.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义一个队列的结构体</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;MyQueue&nbsp;<br><img id=Codehighlighter1_89_151_Open_Image onclick="this.style.display='none'; Codehighlighter1_89_151_Open_Text.style.display='none'; Codehighlighter1_89_151_Closed_Image.style.display='inline'; Codehighlighter1_89_151_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_89_151_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_151_Closed_Text.style.display='none'; Codehighlighter1_89_151_Open_Image.style.display='inline'; Codehighlighter1_89_151_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_89_151_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_89_151_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nTail;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">队列尾</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nHead;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">队列头</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">队列数据</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">规则说明：<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">nHead&nbsp;直接指向了对头的数据位置，<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">nTail&nbsp;直接指向了队尾要插入的位置，<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果nTail==nHead&nbsp;，队列为空<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">nTail&nbsp;比&nbsp;nHead位置小一，(就是在他前面一个)，代表队满<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">所以数组中能存放的数据要比数组的空间小1，是为了判断队列满的情况。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>MyQueue&nbsp;g_queue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义全局的队列<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断队列是否为空</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;IsEmpty(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_363_421_Open_Image onclick="this.style.display='none'; Codehighlighter1_363_421_Open_Text.style.display='none'; Codehighlighter1_363_421_Closed_Image.style.display='inline'; Codehighlighter1_363_421_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_363_421_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_363_421_Closed_Text.style.display='none'; Codehighlighter1_363_421_Open_Image.style.display='inline'; Codehighlighter1_363_421_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_363_421_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_363_421_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(g_queue.nHead&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;g_queue.nTail);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果尾等于头，则为空</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置队列为空</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;SetEmpty(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_452_514_Open_Image onclick="this.style.display='none'; Codehighlighter1_452_514_Open_Text.style.display='none'; Codehighlighter1_452_514_Closed_Image.style.display='inline'; Codehighlighter1_452_514_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_452_514_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_452_514_Closed_Text.style.display='none'; Codehighlighter1_452_514_Open_Image.style.display='inline'; Codehighlighter1_452_514_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_452_514_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_452_514_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;g_queue.nTail&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">都设置为零</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;g_queue.nHead&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断队列是否为满</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;IsFull(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_546_626_Open_Image onclick="this.style.display='none'; Codehighlighter1_546_626_Open_Text.style.display='none'; Codehighlighter1_546_626_Closed_Image.style.display='inline'; Codehighlighter1_546_626_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_546_626_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_546_626_Closed_Text.style.display='none'; Codehighlighter1_546_626_Open_Image.style.display='inline'; Codehighlighter1_546_626_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_546_626_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_546_626_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果ntial&nbsp;比&nbsp;nHead小1，则栈满。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(g_queue.nTail&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;g_queue.nHead;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">入队</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;EnQueue(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData)<br><img id=Codehighlighter1_657_848_Open_Image onclick="this.style.display='none'; Codehighlighter1_657_848_Open_Text.style.display='none'; Codehighlighter1_657_848_Closed_Image.style.display='inline'; Codehighlighter1_657_848_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_657_848_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_657_848_Closed_Text.style.display='none'; Codehighlighter1_657_848_Open_Image.style.display='inline'; Codehighlighter1_657_848_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_657_848_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_657_848_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assert(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">IsFull());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">assert表示断言，断言!IsFull成立，如果不成立，则报告程序错误！</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;g_queue.nData[g_queue.nTail]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nData;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;g_queue.nTail&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(g_queue.nTail&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(g_queue.nTail&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;g_queue.nHead)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">出队</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;DeQueue(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_874_998_Open_Image onclick="this.style.display='none'; Codehighlighter1_874_998_Open_Text.style.display='none'; Codehighlighter1_874_998_Closed_Image.style.display='inline'; Codehighlighter1_874_998_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_874_998_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_874_998_Closed_Text.style.display='none'; Codehighlighter1_874_998_Open_Image.style.display='inline'; Codehighlighter1_874_998_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_874_998_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_874_998_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assert(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">IsEmpty());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;g_queue.nData[g_queue.nHead];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;g_queue.nHead&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(g_queue.nHead&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;nData;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_1012_1630_Open_Image onclick="this.style.display='none'; Codehighlighter1_1012_1630_Open_Text.style.display='none'; Codehighlighter1_1012_1630_Closed_Image.style.display='inline'; Codehighlighter1_1012_1630_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1012_1630_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1012_1630_Closed_Text.style.display='none'; Codehighlighter1_1012_1630_Open_Image.style.display='inline'; Codehighlighter1_1012_1630_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1012_1630_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1012_1630_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">测试</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;SetEmpty();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置队列为空</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(IsEmpty())&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断为空，输出信息</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1074_1113_Open_Image onclick="this.style.display='none'; Codehighlighter1_1074_1113_Open_Text.style.display='none'; Codehighlighter1_1074_1113_Closed_Image.style.display='inline'; Codehighlighter1_1074_1113_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1074_1113_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1074_1113_Closed_Text.style.display='none'; Codehighlighter1_1074_1113_Open_Image.style.display='inline'; Codehighlighter1_1074_1113_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1074_1113_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1074_1113_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;queue&nbsp;is&nbsp;empty!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_1150_1167_Open_Image onclick="this.style.display='none'; Codehighlighter1_1150_1167_Open_Text.style.display='none'; Codehighlighter1_1150_1167_Closed_Image.style.display='inline'; Codehighlighter1_1150_1167_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1150_1167_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1150_1167_Closed_Text.style.display='none'; Codehighlighter1_1150_1167_Open_Image.style.display='inline'; Codehighlighter1_1150_1167_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1150_1167_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1150_1167_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnQueue(i);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(IsFull())&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断队列满</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1196_1250_Open_Image onclick="this.style.display='none'; Codehighlighter1_1196_1250_Open_Text.style.display='none'; Codehighlighter1_1196_1250_Closed_Image.style.display='inline'; Codehighlighter1_1196_1250_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1196_1250_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1196_1250_Closed_Text.style.display='none'; Codehighlighter1_1196_1250_Open_Image.style.display='inline'; Codehighlighter1_1196_1250_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1196_1250_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1196_1250_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;Queue&nbsp;is&nbsp;full\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">栈满的英语是不是full啊</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">出队</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1291_1325_Open_Image onclick="this.style.display='none'; Codehighlighter1_1291_1325_Open_Text.style.display='none'; Codehighlighter1_1291_1325_Closed_Image.style.display='inline'; Codehighlighter1_1291_1325_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1291_1325_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1291_1325_Closed_Text.style.display='none'; Codehighlighter1_1291_1325_Open_Image.style.display='inline'; Codehighlighter1_1291_1325_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1291_1325_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1291_1325_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;DeQueue());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(IsEmpty())&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_1367_1406_Open_Image onclick="this.style.display='none'; Codehighlighter1_1367_1406_Open_Text.style.display='none'; Codehighlighter1_1367_1406_Closed_Image.style.display='inline'; Codehighlighter1_1367_1406_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1367_1406_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1367_1406_Closed_Text.style.display='none'; Codehighlighter1_1367_1406_Open_Image.style.display='inline'; Codehighlighter1_1367_1406_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1367_1406_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1367_1406_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;queue&nbsp;is&nbsp;empty!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">测试出队和入队</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1451_1512_Open_Image onclick="this.style.display='none'; Codehighlighter1_1451_1512_Open_Text.style.display='none'; Codehighlighter1_1451_1512_Closed_Image.style.display='inline'; Codehighlighter1_1451_1512_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1451_1512_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1451_1512_Closed_Text.style.display='none'; Codehighlighter1_1451_1512_Open_Image.style.display='inline'; Codehighlighter1_1451_1512_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1451_1512_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1451_1512_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnQueue(i);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnQueue(i</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;DeQueue());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">IsEmpty())<br><img id=Codehighlighter1_1551_1582_Open_Image onclick="this.style.display='none'; Codehighlighter1_1551_1582_Open_Text.style.display='none'; Codehighlighter1_1551_1582_Closed_Image.style.display='inline'; Codehighlighter1_1551_1582_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1551_1582_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1551_1582_Closed_Text.style.display='none'; Codehighlighter1_1551_1582_Open_Image.style.display='inline'; Codehighlighter1_1551_1582_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1551_1582_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1551_1582_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;DeQueue());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/shongbee2/aggbug/81486.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-29 20:56 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/29/81486.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>栈学习---数组实现</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/29/81483.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Wed, 29 Apr 2009 12:32:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/29/81483.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81483.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/29/81483.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81483.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81483.html</trackback:ping><description><![CDATA[今天学习了栈，据说栈是一个很重要的数据结构。其主要的思想为：<br>1.&nbsp;栈是一个后进先出的数据结构(last-in, first-out LIFO)。<br>2.&nbsp;他的主要操作有&#8220;IsEmpty() 判断栈空。Push()插入数据。Pop弹出数据。<br>3.&nbsp;他的核心数据为栈顶，栈数据区域。栈顶表示最后一个数据的位置，也表示了栈中数据的个数。我这里是有一个int来表示。栈空的时候，栈顶位置为0。要得到栈顶元素，只需要用nData[nTop]就可以了。nData是他的数据区域。<br>4.&nbsp;实现的一些细节，我栈顶的初始值为0，他代表什么数据也没有，压入数据的时候，先把栈顶加1，然后使nData[nTop] = 数据。这样在出栈和得到栈顶元素都很方便。也很方便的得到栈的数据个数。下标为0的空间没有用，浪费了这个空间得到了操作的方便。还有就是注意判断栈是否满了，如果满了还添加的话，栈溢出。也要判断栈如果已经为空了，就不能在弹出(pop)数据了。<br>也就这么多了，奉上源代码：我这个是用数组写的：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">assert.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义一个栈的结构体</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000">&nbsp;MyStack&nbsp;<br><img id=Codehighlighter1_88_134_Open_Image onclick="this.style.display='none'; Codehighlighter1_88_134_Open_Text.style.display='none'; Codehighlighter1_88_134_Closed_Image.style.display='inline'; Codehighlighter1_88_134_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_88_134_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_88_134_Closed_Text.style.display='none'; Codehighlighter1_88_134_Open_Image.style.display='inline'; Codehighlighter1_88_134_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_88_134_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_88_134_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nTop;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">栈顶位置</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData[</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">栈的数据区域</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>MyStack&nbsp;g_stack;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断栈是否为空,空返回true</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;IsEmpty()<br><img id=Codehighlighter1_189_214_Open_Image onclick="this.style.display='none'; Codehighlighter1_189_214_Open_Text.style.display='none'; Codehighlighter1_189_214_Closed_Image.style.display='inline'; Codehighlighter1_189_214_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_189_214_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_189_214_Closed_Text.style.display='none'; Codehighlighter1_189_214_Open_Image.style.display='inline'; Codehighlighter1_189_214_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_189_214_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_189_214_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">g_stack.nTop;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置栈为空</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;SetEmpty()<br><img id=Codehighlighter1_240_272_Open_Image onclick="this.style.display='none'; Codehighlighter1_240_272_Open_Text.style.display='none'; Codehighlighter1_240_272_Closed_Image.style.display='inline'; Codehighlighter1_240_272_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_240_272_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_240_272_Closed_Text.style.display='none'; Codehighlighter1_240_272_Open_Image.style.display='inline'; Codehighlighter1_240_272_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_240_272_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_240_272_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;g_stack.nTop&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">压数据入栈</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Push(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData)<br><img id=Codehighlighter1_303_410_Open_Image onclick="this.style.display='none'; Codehighlighter1_303_410_Open_Text.style.display='none'; Codehighlighter1_303_410_Closed_Image.style.display='inline'; Codehighlighter1_303_410_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_303_410_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_303_410_Closed_Text.style.display='none'; Codehighlighter1_303_410_Open_Image.style.display='inline'; Codehighlighter1_303_410_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_303_410_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_303_410_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assert(g_stack.nTop&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">g_stack.nTop;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;g_stack.nData[g_stack.nTop]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nData;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;g_stack.nTop;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">得到栈顶的引用</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;GetTop()<br><img id=Codehighlighter1_437_499_Open_Image onclick="this.style.display='none'; Codehighlighter1_437_499_Open_Text.style.display='none'; Codehighlighter1_437_499_Closed_Image.style.display='inline'; Codehighlighter1_437_499_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_437_499_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_437_499_Closed_Text.style.display='none'; Codehighlighter1_437_499_Open_Image.style.display='inline'; Codehighlighter1_437_499_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_437_499_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_437_499_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assert(g_stack.nTop);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;g_stack.nData[g_stack.nTop];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">弹出栈顶元素，返回弹出的元素。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Pop(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_534_617_Open_Image onclick="this.style.display='none'; Codehighlighter1_534_617_Open_Text.style.display='none'; Codehighlighter1_534_617_Closed_Image.style.display='inline'; Codehighlighter1_534_617_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_534_617_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_534_617_Closed_Text.style.display='none'; Codehighlighter1_534_617_Open_Image.style.display='inline'; Codehighlighter1_534_617_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_534_617_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_534_617_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;assert(g_stack.nTop);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">g_stack.nTop;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;g_stack.nData[g_stack.nTop&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_631_897_Open_Image onclick="this.style.display='none'; Codehighlighter1_631_897_Open_Text.style.display='none'; Codehighlighter1_631_897_Closed_Image.style.display='inline'; Codehighlighter1_631_897_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_631_897_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_631_897_Closed_Text.style.display='none'; Codehighlighter1_631_897_Open_Image.style.display='inline'; Codehighlighter1_631_897_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_631_897_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_631_897_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;SetEmpty();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">测试栈</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(IsEmpty())<br><img id=Codehighlighter1_671_708_Open_Image onclick="this.style.display='none'; Codehighlighter1_671_708_Open_Text.style.display='none'; Codehighlighter1_671_708_Closed_Image.style.display='inline'; Codehighlighter1_671_708_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_671_708_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_671_708_Closed_Text.style.display='none'; Codehighlighter1_671_708_Open_Image.style.display='inline'; Codehighlighter1_671_708_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_671_708_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_671_708_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">MyStack&nbsp;Is&nbsp;Empty!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_742_783_Open_Image onclick="this.style.display='none'; Codehighlighter1_742_783_Open_Text.style.display='none'; Codehighlighter1_742_783_Closed_Image.style.display='inline'; Codehighlighter1_742_783_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_742_783_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_742_783_Closed_Text.style.display='none'; Codehighlighter1_742_783_Open_Image.style.display='inline'; Codehighlighter1_742_783_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_742_783_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_742_783_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Push(i);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;GetTop());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">IsEmpty())<br><img id=Codehighlighter1_822_849_Open_Image onclick="this.style.display='none'; Codehighlighter1_822_849_Open_Text.style.display='none'; Codehighlighter1_822_849_Closed_Image.style.display='inline'; Codehighlighter1_822_849_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_822_849_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_822_849_Closed_Text.style.display='none'; Codehighlighter1_822_849_Open_Image.style.display='inline'; Codehighlighter1_822_849_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_822_849_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_822_849_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;Pop());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/shongbee2/aggbug/81483.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-29 20:32 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/29/81483.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WCHAR我不再惧怕了</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/28/81349.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Tue, 28 Apr 2009 12:09:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/28/81349.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81349.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/28/81349.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81349.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81349.html</trackback:ping><description><![CDATA[宽字符已经困扰我很久了，以前我都是设置项目的属性把它改为多字节，不用UNICODE。不过现在又遇到宽字节的问题，没有办法，只有硬着头皮学学：<br>我找到的资料：<br><a href="http://hi.baidu.com/shongbee2/blog/item/207925546b6cdd5fd10906e0.html">http://hi.baidu.com/shongbee2/blog/item/207925546b6cdd5fd10906e0.html</a><br><a href="http://hi.baidu.com/shongbee2/blog/item/d4a057511e9539878c5430cb.html">http://hi.baidu.com/shongbee2/blog/item/d4a057511e9539878c5430cb.html</a><br>看了之后我才发现原来有wcsXXX的函数专门处理宽字节的，就是strXXX一样好使。呵呵，我不再惧怕了，就试着自己写了一下，还是学了蛮多东西的：<br>1.有wcsXXX的函数和strXXX的函数对应处理宽字节，wcslen就是求长度的，wcscmp就是比较两个字符串的。<br>2.输出也有相关的操作，wprintf(L&#8221;%s%s&#8221;);这样的操作，对文件也可以用fwprintf函数来输出。不过我发现貌似cout &lt;&lt; wchar；不成功。也发现了一个问题，就是我输出&#8221;相等&#8221;这样一个字符串的时候，发现居然输出不正确，无论是控制台和文件都有错误。可见，这个还是有点小问题的。输出其他的例如&#8221;12345&#8221;等都是正常的。哎，这个函数并不可靠啊。<br>3.宽字节和普通串的转换问题，学了两个函数，一个是：<br>wcstombs(char* strDes, const wchar*, size_t nMax);这个函数的作用是把wchar转换为char。<br>char* strDes 为保存转换后的普通字符串，wchar* 要被转换的宽字符串。转换的最大长度。这里的长度是转换的个数，而不是字节长度。<br>mbstowcs() 就是一个相反的过程了，参数就不说了。<br><br>另一套转换的函数是：<br>int WideCharToMultiByte(<br>&nbsp; UINT CodePage, <br>&nbsp; DWORD dwFlags, <br>&nbsp; LPCWSTR lpWideCharStr,<br>&nbsp; int cchWideChar, <br>&nbsp; LPSTR lpMultiByteStr, <br>&nbsp; int cbMultiByte,<br>&nbsp; LPCSTR lpDefaultChar,&nbsp;&nbsp; &nbsp;<br>&nbsp; LPBOOL lpUsedDefaultChar<br>);<br>他的参数很多，上面的连接有介绍，这里就不怎么细说了。<br>第一个是编码的方式，我一般用CP_ACP。第二个是转换标志，MSDN上说什么都不设置更快，然后我就什么都不管了就用NULL了。具体作用不知道，等遇到了再学。第三个参数就是被转换的字符串，第四个参数是该字符串的长度，-1表示自动算长度，如果是手动给出，一定要把最后的终结符长度也算上。我觉得还是-1来的实际。第五个参数就是保存转换串的指针，第六个参数就是保存串的长度，这里是单位字符的个数。如果转换的时候没有终结符，那么结果也没有终结符，要注意下。最后两个参数就是默认的填充字符和是否使用了默认填充字符，我一般就用NULL代替。<br><br>普通串转宽字节也是类似。<br>这里有几个注意的，一定要保证空间足够。还有就是那个长度是单位字符个数，而不是字节数，在转换时，推荐被转换的字符串长度设置为-1,因为这样他会自动算出终结符结束。返回值也是转换的单位字符个数。例如&#8221;相等&#8221;有普通串转换为宽字节串，返回结果是3，（有终结符），而反过来就是5。如果返回时0 说明转换失败。<br><br>心得：虽然WideCharToMultiByte的参数要多，感觉用的没有wcstombs爽，可是他的准确好高一些，要转换的话，还用用WideCharToMultiByte比较合适，还有就是虽然有一套wcsXXX的库函数，可惜输出还是出现问题的。如果全都用宽字节，那没有关系wcsxxx的函数还是蛮好用的。还有一个疑惑我明明查字典multi是多的意思也就是说multibyte是多字节，我的中文版VS2005配置里面也是说的多字节。搞不懂为什么要用宽字节呢？可能是多字节编码不好用吧。呵呵。 废话也说完了，奉上源代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">fstream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;FILE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;fp&nbsp;;<br>&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;wchar[</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">相等相等</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义一个宽字节的变量，初始为"相等"</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;fp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fopen(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">打开文件称奥做</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;fwprintf(fp,&nbsp;L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;wchar);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出到文件</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">关闭文件</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;wc2[</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义第二个宽字节变量<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">wc开始的有很多宽字节的操作。都和str相对应。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;wcscpy(wc2,&nbsp;wchar);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">复制。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;wcscmp(wc2,&nbsp;wchar);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">比较</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(n&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wprintf(L</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">相等\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里是否注意到没有wprintf有问题的。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;str[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">定义char字符。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;wcstombs(str,&nbsp;wc2,&nbsp;</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">宽字节转换为muiltychar</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出结果</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wc2[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;L</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;i;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;wc2[</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;wcstombs(str,&nbsp;wc2,&nbsp;</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">宽字节转换为muiltychar</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出结果<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">另外的方式转换</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;WideCharToMultiByte(CP_ACP,&nbsp;NULL,&nbsp;wchar,&nbsp;wcslen(wchar)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;str,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;str);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;str2[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">加一</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;WCHAR&nbsp;wc3[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;MultiByteToWideChar(CP_ACP,&nbsp;NULL,&nbsp;str2,&nbsp;strlen(str2)&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;wc3,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">char到宽字节。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
不要脸的再次放入精华区，因为我觉得他困扰我太久了。呵呵<br>
<img src ="http://www.cppblog.com/shongbee2/aggbug/81349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-28 20:09 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/28/81349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【6】——初学光照</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/28/81279.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Mon, 27 Apr 2009 16:28:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/28/81279.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81279.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/28/81279.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81279.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81279.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天学习了OpenGL的光照，我觉得我以前学习OpenGL的方法有写不对，试着改变一下。换一本书。坚持，我不想就这么放弃。。 OpenGL光照就使用OpenGL的函数给世界带来光，他的具体什么数学知识，光线的原理啊，什么的，我现在都不知道。以后再去了解一下，毕竟这些都是数学家做的事情，我没有那么厉害全部搞定，只能用现成的东西：OpenGL提供的函数来实现光照。首先奉上源代码：按键盘1,2,3,4,...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/04/28/81279.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-28 00:28 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/28/81279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>寻找第i小元素</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/27/81251.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Mon, 27 Apr 2009 11:36:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/27/81251.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81251.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/27/81251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81251.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81251.html</trackback:ping><description><![CDATA[今天学习了求第i小元素，被书上忽悠了一下，他硬说是0(n)的复杂度，我怎么看怎么看就是快速排序的思路，只是省去一半的递归而已。我开始还以为真的就0(n)呢，自己还想了好久用一个循环搞定之，结果后来发现，o(n)是最理想情况了。哎。书上说的有个中位数来得到o(n)的求第i小元素的方法，可以我愚笨，没有看懂。我就不信他插入排序不算时间，然后递归一下求中卫数，能正确？反正我是没有看懂，也不敢实现了。只实现了快速排序思路的方法，而且还发现，我写了N遍快速排序了，居然还出错！我也发现我以前的写法也有错。哎，郁闷啊。继续加油吧。。坚持。。<br>奉上源代码：(没有什么，就是快排)
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">time.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">随机分隔，(就是快排的分割函数)</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;RandomPartition(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[],&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nBegin,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nEnd)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nBegin&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;rand()&nbsp;</span><span style="color: #000000;">%</span><span style="color: #000000;">&nbsp;(nEnd&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;nBegin);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nX&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;nData[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[nBegin];<br>&nbsp;&nbsp;&nbsp;&nbsp;nData[nBegin]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nX;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">nEnd;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(nBegin&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nEnd)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(nData[nEnd]&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;nX)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">nEnd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nBegin&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nEnd)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nData[nBegin]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[nEnd];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nData[nEnd]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nX;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">nBegin;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(nData[nBegin]&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nX)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">nBegin;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nBegin&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nEnd)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nData[nEnd]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[nBegin];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">nEnd;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;nData[nBegin]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nX;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;nBegin;<br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">递归调用得到第i小元素</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;RandomIzedRecursion(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[],&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nBegin,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nEnd,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nPos)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nBegin&nbsp;</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">&nbsp;nEnd&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果nBegin，直接认为找到了该值</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;nData[nBegin];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;RandomPartition(nData,&nbsp;nBegin,&nbsp;nEnd);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">分割两部分</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;nPos)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果刚好分割符号就是nPos，就找到了这个值。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;nData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;nPos)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">i&nbsp;&gt;&nbsp;nPos。这继续递归nBegin&nbsp;-&nbsp;i的区域。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;RandomIzedRecursion(nData,&nbsp;nBegin,&nbsp;i,&nbsp;nPos);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">否则递归&nbsp;i&nbsp;+&nbsp;1,&nbsp;nEnd区域，不过这时候nPos要相应的改变为nPos&nbsp;-&nbsp;i&nbsp;-&nbsp;1</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;RandomIzedRecursion(nData,&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;nEnd,&nbsp;nPos&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br><br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">得到第i小元素</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;RandomIzedSelect(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[],&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nPos)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;srand((size_t)time(NULL));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;RandomIzedRecursion(nData,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;nLen,&nbsp;nPos);<br>}<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">10</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">9</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">7</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">};&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">测试</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nTest;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nTest&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;RandomIzedSelect(nData,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">,&nbsp;i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;nTest);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">注意，这里是改变了原来的数据</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;nData[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000;">"</span><span style="color: #000000;">pause</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><br><img src ="http://www.cppblog.com/shongbee2/aggbug/81251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-27 19:36 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/27/81251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求最大最小值</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/27/81250.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Mon, 27 Apr 2009 11:28:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/27/81250.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81250.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/27/81250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81250.html</trackback:ping><description><![CDATA[今天学习了求最大最小数，这是一个很简单的算法，就是遍历一次，然后依次跟当前最大或最小的比较一下，遍历结束，则选择结束。<br>不过同时求最大最小的时候有点小技巧，就是我们两个两个的比较，把大个跟当前最大比较，小的跟当前最小的比较，这样就会节约一点比较时间，有原来的2*n到3*n / 2。但是我觉得在代码的可读性上没有直接两次比较来的好。<br>虽然很简单，还是奉上源代码：
<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">得到最大最小值</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;GetMaxMin(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[],&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pnMax,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pnMin)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nMax&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">0</span><span style="color: #000000;">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化最大值为第一个元素</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">0</span><span style="color: #000000;">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化最小值为第一个元素</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">下标控制i<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">遍历元素，两两比较</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;i&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nData[i]&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;nData[i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">])&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果第一个数比第二个数大</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nMax&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nData[i])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">用第一个数与nMax比较</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nMax&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nMin&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;nData[i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">])&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">用第二个数与nMin比较。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果第一个数不大于第二个数</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nMax&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nData[i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">])&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">用第二个数与nMax比较</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nMax&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nMin&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;nData[i])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">用第一个数与nMin比较</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">确定是否都比较了，如果nLen为偶，可能最后一个数没有比较</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nMax&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nData[i])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">比较最后一个数。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nMax&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nMin&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;nData[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pnMax&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nMax;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">保存结果</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">pnMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nMin;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">返回结果。</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>};<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">得到最小值</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;GetMin(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[],&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen)<br>{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">0</span><span style="color: #000000;">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化nMin为第一个数据</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">遍历数据一一同nMin比较</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nMin&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;nData[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;nMin;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">返回最小值</span><span style="color: #008000;"><br></span><span style="color: #000000;">}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">得到最大值</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;GetMax(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[],&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nMax&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">0</span><span style="color: #000000;">];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化nMax为第二个数据</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">遍历数据一一同nMax比较</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nMax&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nData[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nMax&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;nMax;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">返回nMax</span><span style="color: #008000;"><br></span><span style="color: #000000;">}<br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">10</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">9</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">7</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">};&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">测试</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nMax&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetMax(nData,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nMin&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;GetMin(nData,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;nMin,&nbsp;nMax);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;GetMaxMin(nData,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">nMax,&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">nMin);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;%d\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;nMin,&nbsp;nMax);<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000;">"</span><span style="color: #000000;">pause</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><img src ="http://www.cppblog.com/shongbee2/aggbug/81250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-27 19:28 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/27/81250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【5】——自我安慰和鼓励</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/26/81159.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sun, 26 Apr 2009 13:35:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/26/81159.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81159.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/26/81159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81159.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81159.html</trackback:ping><description><![CDATA[学习OpenGL也有一些日子的，感觉总是空范范的， 1.很多函数只知道大概是做什么的，却没能深入体会他的用法和精髓，更别说原理的理解了。不过没有关系，我先学会怎么用，尽量理解的深点，等会用了我在转头再学一遍，应该理解会更深吧。毕竟OpenGL还是一个满基础的东西的，如果OpenGL学好了，以后学DirectX应该也挺快的吧。呵呵。。 2.在编写OpengGL程序的时候，总是很很多都编译不通过，甚至还有gl.h头文件出错的情况，我都不知道我是怎么回事，难道库有问题。我的处理就是不导入gl.h头文件了，直接用glut.h头文件，ok,就没有问题了。 3.需要静态链接LIB文件，一定要把对应的lib手动静态链接过来，我也不清楚为什么我明明放在Lib目录了还不能静态链接。#pragma comment(lib, "XXX.lib")来静态链接，当然也可以在属性，链接的附加依赖项里面添加要连接的文件。 4.还有就是UNICODE和MultiByte 字节的转换。导致有些函数说不能有XXX转换到XXx。我的处理就是直接在属性-&gt;常规-&gt;字符集改为多字节字符。这样就可以了。不过目前推荐用UNICODE，但是很多时候需要什么WideCharToMultiByte() 和MultiBytToWideChar的转换，导致用的不爽。所以就不用了，因为只是学习嘛。<br>5.我发现了一本学习opneGL比较好的书，他讲解里面的函数的用法都挺好挺实用的，附上他连接：<br><a href="http://download.csdn.net/source/1247246">http://download.csdn.net/source/1247246</a><br>呵呵。。继续加油吧。一定要坚持下去啊。。 
<img src ="http://www.cppblog.com/shongbee2/aggbug/81159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-26 21:35 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/26/81159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>排序算法总结</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/25/81058.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sat, 25 Apr 2009 11:30:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/25/81058.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81058.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/25/81058.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81058.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81058.html</trackback:ping><description><![CDATA[花了很长时间终于把排序的基础学了一下，这段时间学了很多东西，总结一下：<br>学的排序算法有：插入排序，合并排序，冒泡排序，选择排序，希尔排序，堆排序，快速排序，计数排序，基数排序，桶排序（没有实现）。比较一下学习后的心得。<br>我不是很清楚他们的时间复杂度，也真的不知道他们到底谁快谁慢，因为书上的推导我确实只是小小了解，并没有消化。也没有完全理解他们的精髓，所以又什么错误的还需要高手指点。呵呵。<br>1.普及一下排序稳定，所谓排序稳定就是指：如果两个数相同，对他们进行的排序结果为他们的相对顺序不变。例如A={<span style="COLOR: red">1</span>,<span style="COLOR: red">2</span>,<span style="COLOR: #2000ff">1</span>,<span style="COLOR: #2000ff">2</span>,1}这里排序之后是A = {<span style="COLOR: red">1</span>,<span style="COLOR: #2000ff">1</span>,1,<span style="COLOR: red">2</span>,<span style="COLOR: #2000ff">2</span>} 稳定就是排序后第一个1就是排序前的第一个1，第二个1就是排序前第二个1，第三个1就是排序前的第三个1。同理2也是一样。这里用颜色标明了。不稳定呢就是他们的顺序不应和开始顺序一致。也就是可能会是A={<span style="COLOR: #2000ff">1</span>,1,<span style="COLOR: #ff0000">1</span>,<span style="COLOR: #ff0000">2</span>,<span style="COLOR: #0000ff">2</span>}这样的结果。<br>2.普及一下原地排序：原地排序就是指不申请多余的空间来进行的排序，就是在原来的排序数据中比较和交换的排序。例如快速排序，堆排序等都是原地排序，合并排序，计数排序等不是原地排序。<br>3.感觉谁最好，在我的印象中快速排序是最好的，时间复杂度：n*log(n)，不稳定排序。原地排序。他的名字很棒，快速嘛。当然快了。我觉得他的思想很不错，分治，而且还是原地排序，省去和很多的空间浪费。速度也是很快的，n*log(n)。但是有一个软肋就是如果已经是排好的情况下时间复杂度就是n*n,不过在加入随机的情况下这种情况也得以好转，而且他可以做任意的比较，只要你能给出两个元素的大小关系就可以了。适用范围广，速度快。<br>4.插入排序：n*n的时间复杂度，稳定排序，原地排序。插入排序是我学的第一个排序，速度还是很快的，特别是在数组已排好了之后，用它的思想来插入一个数据，效率是很高的。因为不用全部排。他的数据交换也很少，只是数据后移，然后放入要插入的数据。（这里不是指调用插入排序，而是用它的思想）。我觉得，在数据大部分都排好了，用插入排序会给你带来很大的方便。数据的移动和交换都很少。<br>5.冒泡排序，n*n的时间复杂度，稳定排序，原地排序。冒泡排序的思想很不错，一个一个比较，把小的上移，依次确定当前最小元素。因为他简单，稳定排序，而且好实现，所以用处也是比较多的。还有一点就是加上哨兵之后他可以提前退出。<br>6.选择排序，n*n的时间复杂度， 稳定排序，原地排序。选择排序就是冒泡的基本思想，从小的定位，一个一个选择，直到选择结束。他和插入排序是一个相反的过程，插入是确定一个元素的位置，而选择是确定这个位置的元素。他的好处就是每次只选择确定的元素，不会对很多数据进行交换。所以在数据交换量上应该比冒泡小。<br>7.插入排序，选择排序，冒泡排序的比较，他们的时间复杂度都是n*n。我觉得他们的效率也是差不多的，我个人喜欢冒泡一些，因为要用它的时候数据多半不多，而且可以提前的返回已经排序好的数组。而其他两个排序就算已经排好了，他也要做全部的扫描。在数据的交换上，冒泡的确比他们都多。呵呵。举例说明插入一个数据在末尾后排序，冒泡只要一次就能搞定，而选择和插入都必须要n*n的复杂度才能搞定。就看你怎么看待咯。<br>8.合并排序：n*log(n)的时间复杂度， 稳定排序，非原地排序。他的思想是分治，先分成小的部分，排好部分之后合并，因为我们另外申请的空间，在合并的时候效率是0(n)的。速度很快。貌似他的上限是n*log(n)，所以如果说是比较的次数的话，他比快速排序要少一些。对任意的数组都能有效地在n*log(n)排好序。但是因为他是非原地排序，所以虽然他很快，但是貌似他的人气没有快速排序高。<br>9.堆排序：n*log(n)的时间复杂度， 非稳定排序，原地排序。他的思想是利用的堆这种数据结构，堆可以看成一个完全二叉树，所以在排序中比较的次数可以做到很少。加上他也是原地排序，不需要申请额外的空间，效率也不错。可是他的思想感觉比快速难掌握一些。还有就是在已经排好序的基础上添加一个数据再排序，他的交换次数和比较次数一点都不会减少。虽然堆排序在使用的中没有快速排序广泛，但是他的数据结构和思想真的很不错，而且用它来实现优先队列，效率没得说。堆，还是要好好学习掌握的。<br>10.希尔排序：n*log(n)的时间复杂度<span style="COLOR: red">(这里是错误的，应该是n^lamda(1 &lt; lamda &lt; 2), lamda和每次步长选择有关。)</span>， 非稳定排序，原地排序。主要思想是分治，不过他的分治和合并排序的分治不一样，他是按步长来分组的，而不是想合并那样左一半右一半。开始步长为整个的长度的一半。分成nLen/2个组，然后每组排序。接个步长减为原来的一半在分组排序，直到步长为1，排序之后希尔排序就完成了。这个思路很好，据说是插入排序的升级版，所以在实现每组排序的时候我故意用了插入排序。我觉得他是一个特别好的排序方法了。他的缺点就是两个数可能比较多次，因为两个数据会多次分不过他们不会出现数据的交换。效率也是很高的。<br>11.快速排序，堆排序，合并排序，希尔排序的比较，他们的时间复杂的都是n*log(n)，我认为在使用上快速排序最广泛，他原地排序，虽然不稳定，可是很多情况下排序根本就不在意他是否稳定。他的比较次数是比较小的，因为他把数据分成了大和小的两部分。每次都确定了一个数的位置，所以理论上说不会出现两个数比较两次的情况，也是在最后在交换数据，说以数据交换上也很少。合并排序和堆排序也有这些优点，但是合并排序要申请额外的空间。堆排序堆已经排好的数据交换上比快速多。所以目前快速排序用的要广泛的多。还有他很容易掌握和实现。<br>12.计数排序：n的时间复杂度，稳定排序，非原地排序。他的思想比较新颖，就是先约定数据的范围不是很大，而且数据都是整数(或能定位到整数)的情况，然后直接申请一个空间。把要排序的数组A的元素值与申请空间B的下标对应，然后B中存放该下标元素值的个数，从而直接定位A中每个元素的位置。这样效率只为n。因为比较很特殊，虽然很快，但是用的地方并不多。<br>13.基数排序：n的时间复杂度，稳定排序，非原地排序。他的思想是数据比较集中在一个范围，例如都是4位数，都是5位数，或数据有多个关键字，我们先从各位开始排，然后排十位，依次排到最高位，因为我们可以用一个n的方法排一位，所以总的方法为d*n的复杂度。关键字也一样，我们先排第3个关键字，在排第3个关键字，最后排第一个关键字。只有能保证每个关键字在n的时间复杂度完成，那么整个排序就是一个d*n的时间复杂度。所以总的速度是很快的。不过有一点就是要确保关键字能在n的时间复杂度完成。<br>14.桶排序：n的时间复杂度，稳定排序，非原地排序。主要思路和基数排序一样，也是假设都在一个范围例如概率都在0-1，而且分布还挺均匀，那么我们也是和基数排序一样对一个数把他划分在他指定的区域。然后在连接这些区域就可以了。书上对每个区域使用链表的存储，我认为在寸小区域的时候也会有时间在里面。所以只是理论上的n时间复杂度。这种思路是不错的。呵呵。<br>15.计数排序，基数排序，桶排序的比较，我觉得他们都很有思想，不过都是在特定情况下才能发挥最大的效果。虽然效率很高，但是用的不会很广泛。他们之间我更喜欢计数排序，来个映射的方式就直接找到了自己的位置，很高明。和基数排序和同排序只是理论上的n时间复杂度，基数排序要确定一个关键字的排序是n复杂度的，桶排序要确定每个区域的排序是n复杂度的。<br>16.排序算法的最后感悟：黑格尔说过：存在即合理。所以这些排序的算法都是很好的，他确实给了我们思想上的帮助。感谢前人把精华留给了我们。我得到的收获很大，总结一下各自排序的收获：<br>冒泡：好实现，速度不慢，使用于轻量级的数据排序。<br>插入排序：也使用于小数据的排序，但是我从他的思想中学到怎么插入一个数据。呵呵，这样就知道在排好的数据里面，不用再排序了，而是直接调用一下插入就可以了。<br>选择排序：我学会了怎么去获得最大值，最小值等方法。只要选择一下，不就可以了。<br>合并排序：我学会分而治之的方法，而且在合并两个数组的时候很适用。<br>堆排序：可以用它来实现优先队列，而且他的思想应该给我加了很多内力。<br>快速排序：本来就用的最多的排序，对我的帮助大的都不知道怎么说好。<br>希尔排序：也是分治，让我看到了分治的不同，原来还有这种思想的存在。<br>计数排序，基数排序，桶排序：特殊情况特殊处理。<br>附上我学习这里排序的连接 <br>
<meta content=Word.Document name=ProgId>
<meta content="Microsoft Word 11" name=Generator>
<meta content="Microsoft Word 11" name=Originator>
<link href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C07%5Cclip_filelist.xml" rel=File-List><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
a:link, span.MsoHyperlink
{color:blue;
text-decoration:underline;
text-underline:single;}
a:visited, span.MsoHyperlinkFollowed
{color:purple;
text-decoration:underline;
text-underline:single;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<p><a href="http://www.cppblog.com/shongbee2/archive/2009/04/23/80885.html">快速排序学习1</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.cppblog.com/shongbee2/archive/2009/04/23/80887.html">快速排序学习2（随机化版本）</a> </p>
<p><a href="http://www.cppblog.com/shongbee2/archive/2009/04/23/80888.html">快速排序学习3（最初版）</a>&nbsp; <a href="http://www.cppblog.com/shongbee2/archive/2009/04/23/80891.html">快速排序学习4（最初版加随机版）</a></p>
<p><a href="http://www.cppblog.com/shongbee2/archive/2009/03/31/78441.html">插入排序</a> &nbsp;&nbsp;<a href="http://www.cppblog.com/shongbee2/archive/2009/04/25/81038.html">冒泡排序</a> &nbsp;&nbsp;&nbsp;<a href="http://www.cppblog.com/shongbee2/archive/2009/04/25/81040.html">选择排序</a></p>
<p><a href="http://www.cppblog.com/shongbee2/archive/2009/04/25/81046.html">希尔排序</a>&nbsp;&nbsp; <a href="http://www.cppblog.com/shongbee2/archive/2009/03/31/78456.html">合并排序</a>&nbsp; <a href="http://www.cppblog.com/shongbee2/archive/2009/04/21/80639.html">堆排序</a>&nbsp; <a href="http://www.cppblog.com/shongbee2/archive/2009/04/22/80765.html">用堆实现优先队列</a></p>
<a href="http://www.cppblog.com/shongbee2/archive/2009/04/24/80992.html">基数排序</a> &nbsp;<a href="http://www.cppblog.com/shongbee2/archive/2009/04/24/80991.html">计数排序</a> <br>
<img src ="http://www.cppblog.com/shongbee2/aggbug/81058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-25 19:30 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/25/81058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>希尔排序</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/25/81046.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sat, 25 Apr 2009 09:02:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/25/81046.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81046.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/25/81046.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81046.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81046.html</trackback:ping><description><![CDATA[<p><font face="宋体">今天学习了希尔排序，他的主要思想借用了合并排序的思想。不过他不是左边一半右边一半，而是按照步长来分，随着步长减少，分成的组也越少。然后进行各组的插入排序。主要思路就是这样，我在百度百科的博客园找到了其相关学习资料,附上连接：</font></p>
<p><a href="http://baike.baidu.com/view/178698.htm">http://baike.baidu.com/view/178698.htm</a></p>
<p><a href="http://www.cnblogs.com/nokiaguy/archive/2008/05/16/1199359.html">http://www.cnblogs.com/nokiaguy/archive/2008/05/16/1199359.html</a></p>
<p><font face="宋体">所以就不用写思路了哦，真笨，语文也得好好学学，不然组织语言的能力太差了。呵呵。</font></p>
<p><font face="宋体">奉上源代码(因为是自己写的，所以还是贴一下)：</font></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">对单个组排序</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;SortGroup(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pnData,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nBegin,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nStep)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nBegin&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;nStep;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;i&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;nStep)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">寻找i元素的位置，</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nBegin;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;i;&nbsp;j</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;nStep)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果比他小，则这里就是他的位置了</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pnData[i]&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;pnData[j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nTemp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pnData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;k&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i;&nbsp;k&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;j;&nbsp;k&nbsp;</span><span style="color: #000000;">-=</span><span style="color: #000000;">&nbsp;nStep)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnData[k]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pnData[k&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;nStep];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnData[j]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nTemp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>}<br></span><span style="color: #008000;">//</span><span style="color: #008000;">希尔排序,&nbsp;pnData要排序的数据，&nbsp;nLen数据的个数</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;ShellSort(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pnData,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">以nStep分组，nStep每次减为原来的一半。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nStep&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nLen&nbsp;</span><span style="color: #000000;">/</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;&nbsp;nStep&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;nStep&nbsp;</span><span style="color: #000000;">/=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">对每个组进行排序</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nStep;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SortGroup(pnData,&nbsp;nLen,&nbsp;i,&nbsp;nStep);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>}<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">10</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">10</span><span style="color: #000000;">,</span><span style="color: #000000;">9</span><span style="color: #000000;">,</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">7</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">};&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">创建10个数据，测试</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ShellSort(nData,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用希尔排序</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;nData[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000;">"</span><span style="color: #000000;">pause</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><img src ="http://www.cppblog.com/shongbee2/aggbug/81046.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-25 17:02 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/25/81046.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>选择排序</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/25/81040.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sat, 25 Apr 2009 07:51:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/25/81040.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81040.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/25/81040.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81040.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81040.html</trackback:ping><description><![CDATA[<p><font face="宋体">今天学习了选择排序，选择排序和冒泡排序思路上有一点相似，都是先确定最小元素，再确定第二笑元素，最后确定最大元素。他的主要流程如下：</font></p>
<p>1.<font face="宋体">加入一个数组A&nbsp;=&nbsp;{5,3,6,2,4,7}，我们对他进行排序</font></p>
<p>2.<font face="宋体">确定最小的元素放在A[0]位置，我们怎么确定呢，首先默认最小元素为5,他的索引为0,然后用它跟3比较，比他打，则认为最小元素为3,他的索引为1，然后用3跟6比，发现比他小，最小元素还是3，然后跟2比，最小元素变成了2，索引为3，然后跟4比，跟7比。当比较结束之后，最小元素也尘埃落定了。就是2，索引为3，然后我们把他放在A[0]处。为了使A[0]原有数据部丢失，我们使A[0](要放的位置)&nbsp;与A[3]（最小数据的位置）交换。这样就不可以了吗？</font></p>
<p>3.<font face="宋体">然后我们在来找第二小元素，放在A[1]，第三小元素，放在A[2]。。当寻找完毕，我们排序也就结束了。</font></p>
<p>4.<font face="宋体">不过，在找的时候要注意其实位置，不能在找A[2]的时候，还用A[2]的数据跟已经排好的A[0],A[1]比，一定要跟还没有确定位置的元素比。还有一个技巧就是我们不能每次都存元素值和索引，我们只存索引就可以了，通过索引就能找到元素了。呵呵。</font></p>
<p>5.<font face="宋体">他和冒泡的相似和区别，冒泡和他最大的区别是他发现比他小就交换，把小的放上面，而选择是选择到最小的在直接放在确定的位置。选择也是稳定的排序。</font></p>
<p><font face="宋体">基本思路就这样了，奉上源代码：</font></p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">选择排序,&nbsp;pnData要排序的数据，&nbsp;nLen数据的个数</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;SelectSort(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pnData,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">i从[0,nLen-1)开始选择，确定第i个元素</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nIndex&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">遍历剩余数据，选择出当前最小的数据</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;j&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pnData[j]&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;pnData[nIndex])&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nIndex&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;j;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果当前最小数据索引不是i，也就是说排在i位置的数据在nIndex处</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(nIndex&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">交换数据，确定i位置的数据。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nTemp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pnData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnData[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pnData[nIndex];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnData[nIndex]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;nTemp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>}<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">10</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">10</span><span style="color: #000000;">,</span><span style="color: #000000;">9</span><span style="color: #000000;">,</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">7</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">4</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">2</span><span style="color: #000000;">};&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">创建10个数据，测试</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;SelectSort(nData,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">调用选择排序</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;nData[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000;">"</span><span style="color: #000000;">pause</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><img src ="http://www.cppblog.com/shongbee2/aggbug/81040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-25 15:51 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/25/81040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>冒泡排序</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/25/81038.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sat, 25 Apr 2009 07:00:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/25/81038.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81038.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/25/81038.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81038.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81038.html</trackback:ping><description><![CDATA[<p>今天学习了冒泡排序，我开始还纳闷怎么书上没有冒泡排序！结果是我的看书不认真，给漏掉了，这次补上。呵呵。</p>
<p>冒泡排序的主要思路：</p>
</style>我们把要排序的数组A = {3,4,2,1} 看成一组水泡， &lt;!--[endif]--&gt;就像冒泡一样，轻的在上面，重的在下面，换成数据，就是小的在上面，大的在下面。&nbsp;我们先把最轻的冒出到顶端，然后冒出第二轻的在最轻的下面，接着冒出第三轻的。依次内推。直到所有都冒出来了为止。<br>3.我们怎么做到把最轻的放在顶端呢？我们从最底下的数据开始冒，如果比他上面的数据小，就交换（冒上去），然后再用第二第下的数据比较(此时他已经是较轻的一个)，如果他比他上面的小，则交换，把小的冒上去。直到比到第一位置，得到的就是最轻的数据咯，这个过程就像是冒泡一样，下面的和上面的比较，小的冒上去。大的沉下来。呵呵。
<p>画个图先：</p>
<table class=MsoTableGrid style="WIDTH: 376px; BORDER-COLLAPSE: collapse; HEIGHT: 174px" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 32.4pt; PADDING-TOP: 0cm" vAlign=top width=43>
            <p>最初<br></p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>第一次结果</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>第二次结果 </p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>第三次结果</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 32.4pt; PADDING-TOP: 0cm" vAlign=top width=43>
            <p>3</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>3</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>3</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; COLOR: red; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>1</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 32.4pt; PADDING-TOP: 0cm" vAlign=top width=43>
            <p>4</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>4</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; COLOR: red; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>1</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; COLOR: red; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>3</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 32.4pt; PADDING-TOP: 0cm" vAlign=top width=43>
            <p>2</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; COLOR: red; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>1</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; COLOR: red; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>4</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>4</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 32.4pt; PADDING-TOP: 0cm" vAlign=top width=43>
            <p>1</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; COLOR: red; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>2</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>2</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 72pt; PADDING-TOP: 0cm" vAlign=top width=96>
            <p>2</p>
            </td>
        </tr>
    </tbody>
</table>
<p>开始：1 和2 比，1比2小，浮上，然后1跟4比，再1跟3比，这样结构就变为1，3，4，2。最小的位置确定了，然后我们确定第二小的，同理2 vs 4, 2 vs 3 得到2， 再确定第3小数据，3 vs 4得到3，最后就是4为最大的数据，我们冒泡就排好了。</p>
<p>注：这里红色的1,2是前一次比较1 vs 2交换的结构。后面也一样。<br></p>
<p>大概思路就这样了，奉上源代码：</p>
<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">冒泡排序,&nbsp;pnData要排序的数据，&nbsp;nLen数据的个数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;BubbleSort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pnData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;isOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置排序是否结束的哨兵<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">i从[0,nLen-1)开始冒泡，确定第i个元素</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nLen&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">isOk;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">假定排序成功<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从[nLen&nbsp;-&nbsp;1,&nbsp;i）检查是否比上面一个小，把小的冒泡浮上去</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nLen</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;i;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">j)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pnData[j]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;pnData[j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">])&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果下面的比上面小，交换</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nTemp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pnData[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnData[j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pnData[j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnData[j&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nTemp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">};&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建10个数据，测试</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;BubbleSort(nData,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用冒泡排序</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;nData[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
&nbsp;我这里用了一个哨兵做标记，就是如果在已经是排好序的情况下我们能检测出来并退出。随便说一下，冒泡排序是稳定的排序。<br>
<p>&nbsp;</p>
<br>
<img src ="http://www.cppblog.com/shongbee2/aggbug/81038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-25 15:00 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/25/81038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【4】——给立方体纹理贴图(texture)</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/25/81024.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Sat, 25 Apr 2009 03:07:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/25/81024.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/81024.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/25/81024.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/81024.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/81024.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 今天我学习了对一个正方体贴纹理：这次先奉上源代码：#pragma&nbsp;comment(lib,&nbsp;"glaux.lib")#include&nbsp;&lt;gl\glaux.h&gt;#include&nbsp;&lt;gl\glut.h&gt;GLuint&nbsp;g_texture&nbsp;=&nbsp;0;GLfloat&nbsp;xrot&nbsp;=0;GLflo...&nbsp;&nbsp;<a href='http://www.cppblog.com/shongbee2/archive/2009/04/25/81024.html'>阅读全文</a><img src ="http://www.cppblog.com/shongbee2/aggbug/81024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-25 11:07 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/25/81024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基数排序</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/24/80992.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 24 Apr 2009 13:36:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/24/80992.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/80992.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/24/80992.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/80992.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/80992.html</trackback:ping><description><![CDATA[<p>今天学了基数排序，据说他的时间复杂度也是O(n)，他的思路就是：<br>没有计数排序那么理想，我们的数据都比较集中，都比较大，一般是4，5位。基本没有小的数据。<br>那我们的处理很简单，你不是没有小的数据嘛。我给一个基数，例如个位，个位都是[0-10)范围内的。先对他进行归类，把小的放上面，大的放下面，然后个位排好了，在来看10位，我们也这样把小的放上面，大的放下面，依次内推，直到最高位排好。那么不就排好了吗？我们只需要做d(基数个数)的循环就可以了。时间复杂度相当于O(d * n) 因为d为常量，例如5位数，d就是5.所以近似为O(n)的时间复杂度。这次自己写个案例：</p>
<table class=MsoTableGrid style="BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=0 border=1>
    <tbody>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>最初的数据</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>排好个位的数据</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>排好十位的数据</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>排好百位的数据</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>981</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>981</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>725</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>129</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>387</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>753</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>129</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>387</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>753</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>955</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>753</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>456</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>129</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>725</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>955</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>725</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>955</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>456</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>456</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>753</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>725</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>387</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>981</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>955</p>
            </td>
        </tr>
        <tr>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>456</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.5pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>129</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>387</p>
            </td>
            <td style="PADDING-RIGHT: 5.4pt; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; WIDTH: 106.55pt; PADDING-TOP: 0cm" vAlign=top width=142>
            <p>981</p>
            </td>
        </tr>
    </tbody>
</table>
<p>这里只需循环3次就出结果了。</p>
<p>&lt;!--[if !supportLists]--&gt;3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--[endif]--&gt;但是注意，我们必须要把个位排好。但是个位怎么排呢？这个是个问题。书上说的是一叠一叠的怎么合并，我是没有理解的。希望知道的有高手教我一下。</p>
<p>我是用的一个计数排序来排各位的，然后排十位。效率应该也低不到哪里去。呵呵。。</p>
<p>思路就这样咯。奉上源代码：</p>
<p>&nbsp; </p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">计数排序，npRadix为对应的关键字序列，nMax是关键字的范围。npData是具体要<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">排的数据，nLen是数据的范围，这里必须注意npIndex和npData对应的下标要一致<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">也就是说npIndex[1]&nbsp;所对应的值为npData[1]</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;RadixCountSort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;npIndex,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nMax,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;npData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里就不用说了，计数的排序。不过这里为了是排序稳定<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">在标准的方法上做了小修改。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pnCount&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;nMax);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">保存计数的个数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nMax;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnCount[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nLen;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化计数个数</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">pnCount[npIndex[i]];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">确定不大于该位置的个数。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnCount[i]&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;pnCount[i&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pnSort&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;nLen);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">存放零时的排序结果。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注意：这里i是从nLen-1到0的顺序排序的，是为了使排序稳定。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nLen&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">pnCount[npIndex[i]];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pnSort[pnCount[npIndex[i]]]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;npData[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nLen;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把排序结构输入到返回的数据中。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;npData[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pnSort[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;free(pnSort);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">记得释放资源。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;free(pnCount);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">基数排序</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;RadixSort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;nPData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">申请存放基数的空间</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;nDataRadix&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)malloc(</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;nLen);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nRadixBase&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化倍数基数为1</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">bool</span><span style="COLOR: #000000">&nbsp;nIsOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置完成排序为false<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">循环，知道排序完成</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">nIsOk)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nIsOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nRadixBase&nbsp;</span><span style="COLOR: #000000">*=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nLen;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nDataRadix[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nPData[i]&nbsp;</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">&nbsp;nRadixBase;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nDataRadix[i]&nbsp;</span><span style="COLOR: #000000">/=</span><span style="COLOR: #000000">&nbsp;nRadixBase&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nDataRadix[i]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nIsOk&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nIsOk)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果所有的基数都为0，认为排序完成，就是已经判断到最高位了。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RadixCountSort(nDataRadix,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,&nbsp;nPData,&nbsp;nLen);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;free(nDataRadix);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}<br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">测试基数排序。</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;{</span><span style="COLOR: #000000">123</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5264</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9513</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">854</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9639</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1985</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">159</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3654</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8521</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8888</span><span style="COLOR: #000000">};<br>&nbsp;&nbsp;&nbsp;&nbsp;RadixSort(nData,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;nData[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>}</span></div>
<p>&nbsp;</p>
<br>
<img src ="http://www.cppblog.com/shongbee2/aggbug/80992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-24 21:36 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/24/80992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>计数排序，传说时间复杂度为0(n)的排序</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/24/80991.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Fri, 24 Apr 2009 13:11:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/24/80991.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/80991.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/24/80991.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/80991.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/80991.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset="utf-8"">
<meta name="ProgId" content="Word.Document">
<meta name="Generator" content="Microsoft Word 11">
<meta name="Originator" content="Microsoft Word 11">
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">
<link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_editdata.mso"><!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
MicrosoftInternetExplorer4
</xml><![endif]--><!--[if gte mso 9]><xml>
</xml><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"\@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:42.55pt;
mso-footer-margin:49.6pt;
mso-paper-source:0;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:2071032472;
mso-list-type:hybrid;
mso-list-template-ids:-1699300386 -378534486 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
{mso-level-tab-stop:18.0pt;
mso-level-number-position:left;
margin-left:18.0pt;
text-indent:-18.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:普通表格;
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--><!--[if gte mso 9]><xml>
</xml><![endif]--><!--[if gte mso 9]><xml>
</xml><![endif]-->
<p>计数排序：</p>
<p><a name="OLE_LINK1">今天学习了计数排序，貌似计数排序的复杂度为o(n)</a>。很强大。他的基本思路为：</p>
<p><!--[if !supportLists]-->1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->我们希望能线性的时间复杂度排序，如果一个一个比较，显然是不实际的，书上也在决策树模型中论证了，比较排序的情况为nlogn的复杂度。</p>
<p><!--[if !supportLists]-->2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->既然不能一个一个比较，我们想到一个办法，就是如果我在排序的时候就知道他的位置，那不就是扫描一遍，把他放入他应该的位置不就可以了嘛。</p>
<p><!--[if !supportLists]-->3.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->要知道他的位置，我们只需要知道有多少不大于他不就可以了吗？</p>
<p><!--[if !supportLists]-->4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->以此为出发点，我们怎么确定不大于他的个数呢？我们先来个约定，如果数组中的元素都比较集中，都在[0, max]范围内。我们开一个max的空间b数组，把b数组下标对应的元素和要排序的A数组下标对应起来。这样不就可以知道不比他大的有多少个了吗？我们只要把比他小的位置元素个数求和，就是不比他大的。例如：A={3,5,7};我们开一个大小为8的数组b，把a[0] = 3 放入b[3]中，使b[3] = 0; 同理 b[5] = 1; b[7] = 2;其他我们都设置为-1，哈哈我们只需要遍历一下b数组，如果他有数据，就来出来，铁定是当前最小的。如果要知道比a[2]小的数字有多少个，值只需要求出b[0] &#8211; b[6]的有数据的和就可以了。这个0(n)的速度不是盖得。</p>
<p><!--[if !supportLists]-->5.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->思路就是这样咯。但是要注意两个数相同的情况A = {1,2,3,3,4}，这种情况就不可以咯，所以还是有点小技巧的。</p>
<p><!--[if !supportLists]-->6.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<!--[endif]-->处理小技巧：我们不把A的元素大小与B的下标一一对应，而是在B数组对应处记录该元素大小的个数。这不久解决了吗。哈哈。例如A =
{1,2,3,3,4}我们开大小为5的数组b;记录数组A中元素值为0的个数为b[0] = 0, 记录数组A中元素个数为1的b[1] = 1,同理b[2] = 1, b[3] = 2, b[4] = 1;好了，这样我们就知道比A[4](4)小的元素个数是多少了：count = b[0] + b[1] +
b[2] + b[3] = 4;他就把A[4]的元素放在第4个位置。</p>
<p>还是截张书上的图：</p>
<p><!--[if gte vml 1]>
<![endif]--><!--[if !vml]--><img style="width: 444px; height: 323px;" src="http://www.cppblog.com/images/cppblog_com/shongbee2/111.jpg" v:shapes="_x0000_i1025"><!--[endif]--></p>
<p>再次推荐《算法导论》这本书，在我的上次的随笔中有下载链接。哈哈。真正支持还是需要买一下纸版。呵呵。</p>
<p><!--[if !supportLists]-->7. 不过在编程的时候还是要注意细节的，例如我不能每次都来算一下比他小的个数。呵呵，思路就这样了。奉上源代码：</p>
<p>&nbsp;
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdio.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">stdlib.h</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">计数排序</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;CountSort(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pData,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nLen)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pCout&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">保存记数数据的指针</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;pCout&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">)malloc(</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;nLen);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">申请空间<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化记数为0</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCout[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">记录排序记数。在排序的值相应记数加1。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">pCout[pData[i]];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">增</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">确定不比该位置大的数据个数。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pCout[i]&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;pCout[i&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">];&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">不比他大的数据个数为他的个数加上前一个的记数。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pSort&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;NULL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">保存排序结果的指针</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;pSort&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">*</span><span style="color: #000000;">)malloc(</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;nLen);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">申请空间</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">把数据放在指定位置。因为pCout[pData[i]]的值就是不比他大数据的个数。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">为什么要先减一，因为pCout[pData[i]]保存的是不比他大数据的个数中包括了<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">他自己，我的下标是从零开始的!所以要先减一。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">pCout[pData[i]];&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">因为有相同数据的可能，所以要把该位置数据个数减一。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pSort[pCout[pData[i]]]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pData[i];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">排序结束，复制到原来数组中。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;nLen;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pSort[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">最后要注意释放申请的空间。</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;free(pCout);<br>&nbsp;&nbsp;&nbsp;&nbsp;free(pSort);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>}<br><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nData[</span><span style="color: #000000;">10</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">6</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">8</span><span style="color: #000000;">,</span><span style="color: #000000;">3</span><span style="color: #000000;">,</span><span style="color: #000000;">5</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">0</span><span style="color: #000000;">};<br>&nbsp;&nbsp;&nbsp;&nbsp;CountSort(nData,&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">;&nbsp;</span><span style="color: #000000;">++</span><span style="color: #000000;">i)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;nData[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="color: #000000;">"</span><span style="color: #000000;">pause</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
</p>
<br><img src ="http://www.cppblog.com/shongbee2/aggbug/80991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-24 21:11 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/24/80991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OpenGL学习笔记【3】——OpenGL学习起始框架</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/24/80898.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Thu, 23 Apr 2009 16:09:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/24/80898.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/80898.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/24/80898.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/80898.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/80898.html</trackback:ping><description><![CDATA[<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>今天学习了OpenGL的入门，了解了一下他的流程框架，具体什么什么直接操作硬件啊什么的OpenGL的资料就不讲了，什么时候整理一下。直接进入流程框架：</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>我们用的glut辅助库，他能让我们减少好多的操作，例如创建窗口，初始化设备，他都为我们建好了。</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>开始：</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">1.</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>初始化opengl</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">2.</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>设置渲染模式为：</font></span><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'">GLUT_DOUBLE</span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'">&nbsp;|&nbsp;</span><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: 'Times New Roman'; mso-spacerun: 'yes'">GLUT_RGBA</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">3.</span><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>设置窗口大小，和标题，</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">4.</span><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>创建窗口，</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">5.</span><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>进入Opnegl里面的初始化。Opengl里面的初始化这里的初始化一定要在创建窗口以后。</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">6.</span><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>设置渲染的函数</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">7.</span><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>设置变化窗口大小，调整视口的函数</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'">8.</span><span style="FONT-SIZE: 9pt; COLOR: rgb(1,0,1); FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>主程序循环。</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><o:p></o:p></span></p>
<p class=p0 style="MARGIN-TOP: 0pt; MARGIN-BOTTOM: 0pt"><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: '宋体'; mso-spacerun: 'yes'"><font face=宋体>这就是程序的主框架，我们只要把这些内容写入到main函数中，然后再自己实现相关的函数就可以了。是不是给我们带来了很大的方便呢。废话少说。奉上源代码：</font></span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">gl\glut.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;display(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_42_406_Open_Image onclick="this.style.display='none'; Codehighlighter1_42_406_Open_Text.style.display='none'; Codehighlighter1_42_406_Closed_Image.style.display='inline'; Codehighlighter1_42_406_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_42_406_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_406_Closed_Text.style.display='none'; Codehighlighter1_42_406_Open_Image.style.display='inline'; Codehighlighter1_42_406_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_42_406_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_42_406_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glClear(GL_COLOR_BUFFER_BIT&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GL_DEPTH_BUFFER_BIT);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;清楚颜色数据和深度数据（清屏）</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glBegin(GL_TRIANGLES);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制一个三角型</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制颜色为红色</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f&nbsp;(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制三角型的一个顶点0,0,-2</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">同理绘制其他两个顶点</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f&nbsp;(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glColor3f(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glVertex3f&nbsp;(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">2.0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glEnd();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">结束绘制三角型</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutSwapBuffers();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">交换缓冲区。显示图形</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;init&nbsp;(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)&nbsp;<br><img id=Codehighlighter1_433_494_Open_Image onclick="this.style.display='none'; Codehighlighter1_433_494_Open_Text.style.display='none'; Codehighlighter1_433_494_Closed_Image.style.display='inline'; Codehighlighter1_433_494_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_433_494_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_433_494_Closed_Text.style.display='none'; Codehighlighter1_433_494_Open_Image.style.display='inline'; Codehighlighter1_433_494_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_433_494_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_433_494_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glClearColor&nbsp;(</span><span style="COLOR: #000000">1.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0.0</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">清理颜色，为黑色，（也可认为是背景颜色）</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">当窗口大小改变时，会调用这个函数</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;reshape(GLsizei&nbsp;w,GLsizei&nbsp;h)<br><img id=Codehighlighter1_550_868_Open_Image onclick="this.style.display='none'; Codehighlighter1_550_868_Open_Text.style.display='none'; Codehighlighter1_550_868_Closed_Image.style.display='inline'; Codehighlighter1_550_868_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_550_868_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_550_868_Closed_Text.style.display='none'; Codehighlighter1_550_868_Open_Image.style.display='inline'; Codehighlighter1_550_868_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_550_868_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_550_868_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里小说明一下：矩阵模式是不同的，他们各自有一个矩阵。投影相关<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">只能用投影矩阵。(只是目前情况下哦，等我学多了可能就知道为什么了。)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glViewport(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,w,h);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置视口</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_PROJECTION);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置矩阵模式为投影变换矩阵，</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">变为单位矩阵</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;gluPerspective(</span><span style="COLOR: #000000">60</span><span style="COLOR: #000000">,&nbsp;(GLfloat)w&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;h,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置投影矩阵</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glMatrixMode(GL_MODELVIEW);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置矩阵模式为视图矩阵(模型)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glLoadIdentity();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">变为单位矩阵</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">&nbsp;argv)<br><img id=Codehighlighter1_904_1318_Open_Image onclick="this.style.display='none'; Codehighlighter1_904_1318_Open_Text.style.display='none'; Codehighlighter1_904_1318_Closed_Image.style.display='inline'; Codehighlighter1_904_1318_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_904_1318_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_904_1318_Closed_Text.style.display='none'; Codehighlighter1_904_1318_Open_Image.style.display='inline'; Codehighlighter1_904_1318_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_904_1318_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_904_1318_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutInit(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">argc,&nbsp;argv);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Opnegl初始化</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutInitDisplayMode&nbsp;(GLUT_DOUBLE&nbsp;</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">&nbsp;GLUT_RGBA);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置显示模式为双缓冲，RGEBA</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowSize&nbsp;(</span><span style="COLOR: #000000">250</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">250</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">窗口大小</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutInitWindowPosition&nbsp;(</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">窗口位置</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutCreateWindow&nbsp;(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">创建一个标题为hello的窗口</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;init&nbsp;();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化资源,这里一定要在创建窗口以后，不然会无效。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutDisplayFunc(display);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">窗口大小改变时的回调</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutReshapeFunc(reshape);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">绘制图形时的回调</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;glutMainLoop();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">主循环。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
在这里只是话了一个三角形。呵呵。<br><!--endfragment-->
<img src ="http://www.cppblog.com/shongbee2/aggbug/80898.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-24 00:09 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/24/80898.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速排序学习4（最初版加随机版）</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/23/80891.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Thu, 23 Apr 2009 13:09:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/23/80891.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/80891.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/23/80891.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/80891.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/80891.html</trackback:ping><description><![CDATA[这是最初版本的和随机版本的结合，我也修改了一下最初版本的小点东西，思路还是最初版的思路，只是我把分割符中的数据排好了而已。呵呵。。也没有什么号说的。奉上源代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">time.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">化分区间,找到最后元素的排序位置。并返回分隔的点（即最后一数据排序的位置）。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">划分的区间是[nBegin,&nbsp;nEnd).&nbsp;pData是保存数据的指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Partition(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nBeging,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_186_911_Open_Image onclick="this.style.display='none'; Codehighlighter1_186_911_Open_Text.style.display='none'; Codehighlighter1_186_911_Closed_Image.style.display='inline'; Codehighlighter1_186_911_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_186_911_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_186_911_Closed_Text.style.display='none'; Codehighlighter1_186_911_Open_Image.style.display='inline'; Codehighlighter1_186_911_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_186_911_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_186_911_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nBeging&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;rand()</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">(nBeging&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;nEnd);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里是和hoare的思路写的，和原版本不是完全一样，思路是一样的。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pData[i];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pData[i]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pData[nBeging];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pData[nBeging]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">int&nbsp;x&nbsp;=&nbsp;pData[nBeging];</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">nEnd;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(nBeging&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_399_809_Open_Image onclick="this.style.display='none'; Codehighlighter1_399_809_Open_Text.style.display='none'; Codehighlighter1_399_809_Closed_Image.style.display='inline'; Codehighlighter1_399_809_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_399_809_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_399_809_Closed_Text.style.display='none'; Codehighlighter1_399_809_Open_Image.style.display='inline'; Codehighlighter1_399_809_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_399_809_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_399_809_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从后向前，找到比X小的元素位置</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(pData[nEnd]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;x)<br><img id=Codehighlighter1_448_463_Open_Image onclick="this.style.display='none'; Codehighlighter1_448_463_Open_Text.style.display='none'; Codehighlighter1_448_463_Closed_Image.style.display='inline'; Codehighlighter1_448_463_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_448_463_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_448_463_Closed_Text.style.display='none'; Codehighlighter1_448_463_Open_Image.style.display='inline'; Codehighlighter1_448_463_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_448_463_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_448_463_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">nEnd;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把x小的元素位置提前，nBegin处刚好能保存比x小的元素</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nBeging&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_523_620_Open_Image onclick="this.style.display='none'; Codehighlighter1_523_620_Open_Text.style.display='none'; Codehighlighter1_523_620_Closed_Image.style.display='inline'; Codehighlighter1_523_620_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_523_620_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_523_620_Closed_Text.style.display='none'; Codehighlighter1_523_620_Open_Image.style.display='inline'; Codehighlighter1_523_620_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_523_620_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_523_620_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData[nBeging]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pData[nEnd];&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData[nEnd]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里是为了做一个哨兵，防止小区域增加时越界。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">nBeging;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">小的区域增加，找到一个不比x小的元素。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(pData[nBeging]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;x)<br><img id=Codehighlighter1_678_696_Open_Image onclick="this.style.display='none'; Codehighlighter1_678_696_Open_Text.style.display='none'; Codehighlighter1_678_696_Closed_Image.style.display='inline'; Codehighlighter1_678_696_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_678_696_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_678_696_Closed_Text.style.display='none'; Codehighlighter1_678_696_Open_Image.style.display='inline'; Codehighlighter1_678_696_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_678_696_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_678_696_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">nBeging;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把不比x小的元素存放在大的区域内。nEnd刚好预留了此位置。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nBeging&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_758_806_Open_Image onclick="this.style.display='none'; Codehighlighter1_758_806_Open_Text.style.display='none'; Codehighlighter1_758_806_Closed_Image.style.display='inline'; Codehighlighter1_758_806_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_758_806_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_758_806_Closed_Text.style.display='none'; Codehighlighter1_758_806_Open_Image.style.display='inline'; Codehighlighter1_758_806_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_758_806_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_758_806_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData[nEnd]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pData[nBeging];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">nEnd;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;pData[nBeging]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;x;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里一定要赋值，不然如果是nEnd退出循环，他是保存着以前的大值，会出错。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;nBeging;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回nD的位置，就是分割的位置。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">排序的递归调用。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;QuickSortRecursion(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nBeging,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_983_1303_Open_Image onclick="this.style.display='none'; Codehighlighter1_983_1303_Open_Text.style.display='none'; Codehighlighter1_983_1303_Closed_Image.style.display='inline'; Codehighlighter1_983_1303_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_983_1303_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_983_1303_Closed_Text.style.display='none'; Codehighlighter1_983_1303_Open_Image.style.display='inline'; Codehighlighter1_983_1303_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_983_1303_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_983_1303_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nBeging&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;nEnd&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果区域不存在或只有一个数据则不递归排序</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1035_1050_Open_Image onclick="this.style.display='none'; Codehighlighter1_1035_1050_Open_Text.style.display='none'; Codehighlighter1_1035_1050_Closed_Image.style.display='inline'; Codehighlighter1_1035_1050_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1035_1050_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1035_1050_Closed_Text.style.display='none'; Codehighlighter1_1035_1050_Open_Image.style.display='inline'; Codehighlighter1_1035_1050_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1035_1050_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1035_1050_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里因为分割的时候，分割点处的数据就是排序中他的位置。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">也就是说他的左边的数据都小于等于他，他右边的数据都大于他。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">所以他不在递归调用的数据中。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Partition(pData,&nbsp;nBeging,&nbsp;nEnd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">找到分割点</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;QuickSortRecursion(pData,&nbsp;nBeging,&nbsp;i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">递归左边的排序</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;QuickSortRecursion(pData,&nbsp;i&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;nEnd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">递归右边的排序</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">快速排序</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;QuickSort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen)<br><img id=Codehighlighter1_1349_1447_Open_Image onclick="this.style.display='none'; Codehighlighter1_1349_1447_Open_Text.style.display='none'; Codehighlighter1_1349_1447_Closed_Image.style.display='inline'; Codehighlighter1_1349_1447_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1349_1447_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1349_1447_Closed_Text.style.display='none'; Codehighlighter1_1349_1447_Open_Image.style.display='inline'; Codehighlighter1_1349_1447_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1349_1447_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1349_1447_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;srand((unsigned&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)time(NULL));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">递归调用，快速排序。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;QuickSortRecursion(pData,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;nLen);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_1460_1644_Open_Image onclick="this.style.display='none'; Codehighlighter1_1460_1644_Open_Text.style.display='none'; Codehighlighter1_1460_1644_Closed_Image.style.display='inline'; Codehighlighter1_1460_1644_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1460_1644_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1460_1644_Closed_Text.style.display='none'; Codehighlighter1_1460_1644_Open_Image.style.display='inline'; Codehighlighter1_1460_1644_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1460_1644_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1460_1644_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_1479_1500_Open_Image onclick="this.style.display='none'; Codehighlighter1_1479_1500_Open_Text.style.display='none'; Codehighlighter1_1479_1500_Closed_Image.style.display='inline'; Codehighlighter1_1479_1500_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1479_1500_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1479_1500_Closed_Text.style.display='none'; Codehighlighter1_1479_1500_Open_Image.style.display='inline'; Codehighlighter1_1479_1500_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1479_1500_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1479_1500_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">测试数据</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;QuickSort(nData,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br><img id=Codehighlighter1_1565_1595_Open_Image onclick="this.style.display='none'; Codehighlighter1_1565_1595_Open_Text.style.display='none'; Codehighlighter1_1565_1595_Closed_Image.style.display='inline'; Codehighlighter1_1565_1595_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1565_1595_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1565_1595_Closed_Text.style.display='none'; Codehighlighter1_1565_1595_Open_Image.style.display='inline'; Codehighlighter1_1565_1595_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1565_1595_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1565_1595_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;nData[i]);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/shongbee2/aggbug/80891.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-23 21:09 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/23/80891.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速排序学习3（最初版）</title><link>http://www.cppblog.com/shongbee2/archive/2009/04/23/80888.html</link><dc:creator>shongbee2</dc:creator><author>shongbee2</author><pubDate>Thu, 23 Apr 2009 12:21:00 GMT</pubDate><guid>http://www.cppblog.com/shongbee2/archive/2009/04/23/80888.html</guid><wfw:comment>http://www.cppblog.com/shongbee2/comments/80888.html</wfw:comment><comments>http://www.cppblog.com/shongbee2/archive/2009/04/23/80888.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/shongbee2/comments/commentRss/80888.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/shongbee2/services/trackbacks/80888.html</trackback:ping><description><![CDATA[这次学习了快速排序的最初版的思路，基本也一样，呵呵，不过他在分割的时候，是两边同时进行而已。注意一点就是他只是分割的大小，但是在分割处并不是排好的数据，所以要注意一下，不能去掉该数据的迭代。<br>直接奉上源代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">化分区间,找到最后元素的排序位置。并返回分隔的点（即最后一数据排序的位置）。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">划分的区间是[nBegin,&nbsp;nEnd).&nbsp;pData是保存数据的指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;Partition(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nBeging,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_168_697_Open_Image onclick="this.style.display='none'; Codehighlighter1_168_697_Open_Text.style.display='none'; Codehighlighter1_168_697_Closed_Image.style.display='inline'; Codehighlighter1_168_697_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_168_697_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_168_697_Closed_Text.style.display='none'; Codehighlighter1_168_697_Open_Image.style.display='inline'; Codehighlighter1_168_697_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_168_697_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_168_697_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里是和hoare的最初快速排序的版本。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pData[nBeging];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">nBeging;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(nBeging&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_257_601_Open_Image onclick="this.style.display='none'; Codehighlighter1_257_601_Open_Text.style.display='none'; Codehighlighter1_257_601_Closed_Image.style.display='inline'; Codehighlighter1_257_601_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_257_601_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_257_601_Closed_Text.style.display='none'; Codehighlighter1_257_601_Open_Image.style.display='inline'; Codehighlighter1_257_601_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_257_601_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_257_601_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">nEnd;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">从后向前，找到比X小的元素位置</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(pData[nEnd]&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;x)<br><img id=Codehighlighter1_316_331_Open_Image onclick="this.style.display='none'; Codehighlighter1_316_331_Open_Text.style.display='none'; Codehighlighter1_316_331_Closed_Image.style.display='inline'; Codehighlighter1_316_331_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_316_331_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_316_331_Closed_Text.style.display='none'; Codehighlighter1_316_331_Open_Image.style.display='inline'; Codehighlighter1_316_331_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_316_331_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_316_331_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">nEnd;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">小的区域增加，找到一个不比x小的元素</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">nBeging;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(pData[nBeging]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;x)<br><img id=Codehighlighter1_401_419_Open_Image onclick="this.style.display='none'; Codehighlighter1_401_419_Open_Text.style.display='none'; Codehighlighter1_401_419_Closed_Image.style.display='inline'; Codehighlighter1_401_419_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_401_419_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_401_419_Closed_Text.style.display='none'; Codehighlighter1_401_419_Open_Image.style.display='inline'; Codehighlighter1_401_419_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_401_419_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_401_419_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">nBeging;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">把不比x小的元素存放在大的区域内。nEnd刚好预留了此位置。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nBeging&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_481_573_Open_Image onclick="this.style.display='none'; Codehighlighter1_481_573_Open_Text.style.display='none'; Codehighlighter1_481_573_Closed_Image.style.display='inline'; Codehighlighter1_481_573_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_481_573_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_481_573_Closed_Text.style.display='none'; Codehighlighter1_481_573_Open_Image.style.display='inline'; Codehighlighter1_481_573_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_481_573_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_481_573_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nTemp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pData[nBeging];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData[nBeging]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pData[nEnd];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pData[nEnd]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;nTemp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_584_598_Open_Image onclick="this.style.display='none'; Codehighlighter1_584_598_Open_Text.style.display='none'; Codehighlighter1_584_598_Closed_Image.style.display='inline'; Codehighlighter1_584_598_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_584_598_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_584_598_Closed_Text.style.display='none'; Codehighlighter1_584_598_Open_Image.style.display='inline'; Codehighlighter1_584_598_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_584_598_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_584_598_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注意这里并没有给分割点排序，只是做了分割，办证nEnd+1的左边小于<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">nEnd&nbsp;+&nbsp;1的右边。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;nEnd&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回nD的位置，就是分割的位置。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">排序的递归调用。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;QuickSortRecursion(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nBeging,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nEnd)<br><img id=Codehighlighter1_769_1053_Open_Image onclick="this.style.display='none'; Codehighlighter1_769_1053_Open_Text.style.display='none'; Codehighlighter1_769_1053_Closed_Image.style.display='inline'; Codehighlighter1_769_1053_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_769_1053_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_769_1053_Closed_Text.style.display='none'; Codehighlighter1_769_1053_Open_Image.style.display='inline'; Codehighlighter1_769_1053_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_769_1053_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_769_1053_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(nBeging&nbsp;</span><span style="COLOR: #000000">&gt;=</span><span style="COLOR: #000000">&nbsp;nEnd&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果区域不存在或只有一个数据则不递归排序</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_821_836_Open_Image onclick="this.style.display='none'; Codehighlighter1_821_836_Open_Text.style.display='none'; Codehighlighter1_821_836_Closed_Image.style.display='inline'; Codehighlighter1_821_836_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_821_836_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_821_836_Closed_Text.style.display='none'; Codehighlighter1_821_836_Open_Image.style.display='inline'; Codehighlighter1_821_836_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_821_836_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_821_836_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">也就是说他的左边的数据都小于等于他，他右边的数据都大于他。<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">所以他不在递归调用的数据中。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Partition(pData,&nbsp;nBeging,&nbsp;nEnd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">找到分割点</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;QuickSortRecursion(pData,&nbsp;nBeging,&nbsp;i);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">递归左边的排序</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;QuickSortRecursion(pData,&nbsp;i,&nbsp;nEnd);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">递归右边的排序</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">快速排序</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;QuickSort(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pData,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen)<br><img id=Codehighlighter1_1099_1163_Open_Image onclick="this.style.display='none'; Codehighlighter1_1099_1163_Open_Text.style.display='none'; Codehighlighter1_1099_1163_Closed_Image.style.display='inline'; Codehighlighter1_1099_1163_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1099_1163_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1099_1163_Closed_Text.style.display='none'; Codehighlighter1_1099_1163_Open_Image.style.display='inline'; Codehighlighter1_1099_1163_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1099_1163_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1099_1163_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">递归调用，快速排序。</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;QuickSortRecursion(pData,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;nLen);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_1176_1380_Open_Image onclick="this.style.display='none'; Codehighlighter1_1176_1380_Open_Text.style.display='none'; Codehighlighter1_1176_1380_Closed_Image.style.display='inline'; Codehighlighter1_1176_1380_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_1176_1380_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1176_1380_Closed_Text.style.display='none'; Codehighlighter1_1176_1380_Open_Image.style.display='inline'; Codehighlighter1_1176_1380_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_1176_1380_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1176_1380_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_1195_1219_Open_Image onclick="this.style.display='none'; Codehighlighter1_1195_1219_Open_Text.style.display='none'; Codehighlighter1_1195_1219_Closed_Image.style.display='inline'; Codehighlighter1_1195_1219_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1195_1219_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1195_1219_Closed_Text.style.display='none'; Codehighlighter1_1195_1219_Open_Image.style.display='inline'; Codehighlighter1_1195_1219_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nData[</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span id=Codehighlighter1_1195_1219_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1195_1219_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">45</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">88</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">75</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">测试数据</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;QuickSort(nData,&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用快速排序</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">输出结果</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_1303_1333_Open_Image onclick="this.style.display='none'; Codehighlighter1_1303_1333_Open_Text.style.display='none'; Codehighlighter1_1303_1333_Closed_Image.style.display='inline'; Codehighlighter1_1303_1333_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_1303_1333_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1303_1333_Closed_Text.style.display='none'; Codehighlighter1_1303_1333_Open_Image.style.display='inline'; Codehighlighter1_1303_1333_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_1303_1333_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_1303_1333_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;nData[i]);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/shongbee2/aggbug/80888.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/shongbee2/" target="_blank">shongbee2</a> 2009-04-23 20:21 <a href="http://www.cppblog.com/shongbee2/archive/2009/04/23/80888.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>