﻿<?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++博客-Zero Lee的专栏-随笔分类-Data structure and algorithms</title><link>http://www.cppblog.com/zerolee/category/15205.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 16 Jun 2012 15:17:32 GMT</lastBuildDate><pubDate>Sat, 16 Jun 2012 15:17:32 GMT</pubDate><ttl>60</ttl><item><title>如何将一片内存链接成链表</title><link>http://www.cppblog.com/zerolee/archive/2012/06/16/179073.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Sat, 16 Jun 2012 10:38:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2012/06/16/179073.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/179073.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2012/06/16/179073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/179073.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/179073.html</trackback:ping><description><![CDATA[假设有一片内存，大小为m*n, m是每个单元的大小，而且&gt;=8，共有n个这样的单元，如何将它们链接成n个节点的链表，要求不再使用任何其它内存空间。<br />
<br />
这里给出SGI STL内存分配器的一个简单实现：<br />
首先定义一个union数据结构：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">1</span>&nbsp;union&nbsp;obj&nbsp;{<br />
<span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;union&nbsp;obj*&nbsp;free_list_link;<br />
<span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">char</span>&nbsp;client_data[1];<br />
<span style="color: #008080; ">4</span>&nbsp;};</div>
<br />
这个union结构体的最大大小为4bytes （在32bits 平台上），8bytes （在64bits平台上）。<br />
<br />
假设那片内存的地址为chunk，那么我们可以这样做：
<span style="font-size: 13px; color: #008080; ">&nbsp;<br /></span><br />
<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><span style="color: #008080; ">&nbsp;1 obj* current_obj, *next_obj;<br />&nbsp;2</span>&nbsp;next_obj&nbsp;=&nbsp;(obj*)chunk;<br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;(<span style="color: #0000FF; ">int</span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;;&nbsp;i++)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;4</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current_obj&nbsp;=&nbsp;next_obj;<br />
<span style="color: #008080; ">&nbsp;5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next_obj&nbsp;=&nbsp;(obj*)((<span style="color: #0000FF; ">char</span>*)next_obj&nbsp;+&nbsp;m);<br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(n&nbsp;-&nbsp;1&nbsp;==&nbsp;i)&nbsp;{<br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current_obj&nbsp;-&gt;&nbsp;free_list_link&nbsp;=&nbsp;0;<br />
<span style="color: #008080; ">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;{<br />
<span style="color: #008080; ">10</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current_obj&nbsp;-&gt;&nbsp;free_list_link&nbsp;=&nbsp;next_obj;<br />
<span style="color: #008080; ">11</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<span style="color: #008080; ">12</span>&nbsp;}<br />
<span style="color: #008080; ">13</span>&nbsp;<font color="#008080"><br />
</font></div><img src ="http://www.cppblog.com/zerolee/aggbug/179073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2012-06-16 18:38 <a href="http://www.cppblog.com/zerolee/archive/2012/06/16/179073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>求一个正整数的平方根程序实现</title><link>http://www.cppblog.com/zerolee/archive/2011/10/19/158661.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Wed, 19 Oct 2011 01:37:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/10/19/158661.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/158661.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/10/19/158661.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/158661.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/158661.html</trackback:ping><description><![CDATA[求一个正整数的平方根的程序实现：<br />采用加法递增的方式来代替乘法与N进行比较，递增是按照等差数列的方式。<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;square(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;n)<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<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;n;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(i</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(tmp&nbsp;</span><span style="color: #000000; ">==</span><span style="color: #000000; ">&nbsp;n)<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;i;<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(n</span><span style="color: #000000; ">!=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">no&nbsp;integer&nbsp;sqare&nbsp;found!\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;tmp;<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.cppblog.com/zerolee/aggbug/158661.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-10-19 09:37 <a href="http://www.cppblog.com/zerolee/archive/2011/10/19/158661.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一组数的全排列和组合程序实现</title><link>http://www.cppblog.com/zerolee/archive/2011/10/19/158660.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Wed, 19 Oct 2011 01:34:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/10/19/158660.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/158660.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/10/19/158660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/158660.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/158660.html</trackback:ping><description><![CDATA[显示一组数的全排列和组合程序：
<div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;print(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;s)<br />
</span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">{<br />
</span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&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;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;n</span><span style="color: #000000; ">++</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">[</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<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;s.size();&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />
</span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;%d&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;s[i]);<br />
</span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&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 />
</span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;permutation(std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;beg,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;end)<br />
</span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">{<br />
</span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(beg&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;end)&nbsp;{<br />
</span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(v);<br />
</span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">17</span>&nbsp;<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;beg;&nbsp;i&nbsp;</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">&nbsp;end;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap(v[i],&nbsp;v[beg]);<br />
</span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;permutation(v,&nbsp;beg</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;end);&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;pleate&nbsp;note,&nbsp;here&nbsp;always&nbsp;beg+1,&nbsp;not&nbsp;i+1</span><span style="color: #008000; "><br />
</span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap(v[i],&nbsp;v[beg]);<br />
</span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">23</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">24</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;pm(std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v)<br />
</span><span style="color: #008080; ">25</span>&nbsp;<span style="color: #000000; ">{<br />
</span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::copy(v.begin(),&nbsp;v.end(),&nbsp;std::ostream_iterator</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(std::cout,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
</span><span style="color: #008080; ">27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\nfull&nbsp;permulation&nbsp;are:\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;permutation(v,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;v.size()</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">29</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">30</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">31</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;print(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;beg,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;end)<br />
</span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #000000; ">{<br />
</span><span style="color: #008080; ">33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">static</span><span style="color: #000000; ">&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;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />
</span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d:</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,&nbsp;n</span><span style="color: #000000; ">++</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">[</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::copy(v.begin()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">beg,&nbsp;v.begin()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">end</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;std::ostream_iterator</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(std::cout,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br />
</span><span style="color: #008080; ">37</span>&nbsp;<span style="color: #000000; ">&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 />
</span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">39</span>&nbsp;<span style="color: #000000; "><br />
</span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;fullcombination(std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v)<br />
</span><span style="color: #008080; ">41</span>&nbsp;<span style="color: #000000; ">{<br />
</span><span style="color: #008080; ">42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><div style="display: inline-block; "></div>full combination<span style="color: #000000; ">&nbsp;are:\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />
</span><span style="color: #008080; ">43</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(unsigned&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;v.size();&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(v,&nbsp;i,&nbsp;i);<br />
</span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;(unsigned&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</span><span style="color: #000000; ">+</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;v.size();&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">46</span>&nbsp;<span style="color: #000000; ">&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;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;&nbsp;k&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;v.size()</span><span style="color: #000000; ">-</span><span style="color: #000000; ">j;&nbsp;k</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)&nbsp;{<br />
</span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap(v[j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">k],&nbsp;v[j]);<br />
</span><span style="color: #008080; ">48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(v,&nbsp;i,&nbsp;j);<br />
</span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap(v[j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">k],&nbsp;v[j]);<br />
</span><span style="color: #008080; ">50</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">51</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080; ">53</span>&nbsp;<span style="color: #000000; ">}<br />
</span><span style="color: #008080; ">54</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.cppblog.com/zerolee/aggbug/158660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-10-19 09:34 <a href="http://www.cppblog.com/zerolee/archive/2011/10/19/158660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Generating Permutations</title><link>http://www.cppblog.com/zerolee/archive/2011/09/21/156428.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Wed, 21 Sep 2011 07:22:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/09/21/156428.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/156428.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/09/21/156428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/156428.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/156428.html</trackback:ping><description><![CDATA[<span class="Apple-style-span" style="font-family: Arial; line-height: normal; font-size: 10pt; ">A permutation can be obtained by selecting an element in the given set and recursively permuting the remaining elements.<br />
<br />
<div><img src="http://www.cse.ohio-state.edu/~gurari/course/cis680/cis680350x.gif" alt=" { ai,P(a1,...,ai-1,ai+1,...,aN) if N &gt; 1 P(a1,...,aN) = aN if N = 1" /></div>
</span><span class="Apple-style-span" style="font-family: Arial; line-height: normal; background-color: #ffffff; font-size: medium; "><br />
<br />
</span><font class="Apple-style-span" face="Arial" size="3"><span class="Apple-style-span" style="line-height: normal; ">
<div><img src="http://www.cse.ohio-state.edu/~gurari/course/cis680/cis680351x.gif" alt=" --|--|--|-| |a|b-|c-d-| a|------------b------------c-------------d --|--|--|-| ---|-|--|--| ---|--|-|--| --|--|--|-| |-|b-|c-d-| |a-|-|c-|d-| |a-|b-|-|d-| |a|b-|c-|-|" /><br />
<br />
</div>
</span></font><span class="Apple-style-span" style="font-family: Arial; line-height: normal; font-size: 10pt; ">At each stage of the permutation process, the given set of elements consists of two parts: a subset of values that already have been processed, and a subset that still needs to be processed. This logical seperation can be physically realized by exchanging, in the i&#8217;th step, the i&#8217;th value with the value being chosen at that stage. That approaches leaves the first subset in the first i locations of the outcome.</span><font class="Apple-style-span" face="Arial" size="3"><span class="Apple-style-span" style="line-height: normal; ">
<div><br />
<div><img src="http://www.cse.ohio-state.edu/~gurari/course/cis680/cis680352x.gif" alt=" --|--|--|-| |a|b-|c-d-| --|--|------------|--------------------------|--|-| a||b |c d | |b a |c |d | |c||b |a|d | |d|b |c |a| -----|--------------------------|---- ----------- --|--|--|-| ---|-|--|--| ---|--|-|--| b-|a-|c-d-| |b-|c|a-|d-| |b-|d-|c|a-| ---|--|------------|--|-| |b-|c-a-|d-| b-|c-|d-|a| | b-|c-|d-|a| |-|--|--|-|" /></div>
</div>
</span></font><span class="Apple-style-span" style="font-family: Arial; line-height: normal; font-size: medium; ">
<pre class="Verbatim"><span class="cmtt-10" style="font-family: monospace; ">permute(i)</span>&nbsp;
&nbsp;&nbsp;&nbsp;<span class="cmtt-10" style="font-family: monospace; ">if</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">i</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">==</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">N</span>&nbsp;&nbsp;<span class="cmtt-10" style="font-family: monospace; ">output</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">A[N]</span>&nbsp;
&nbsp;&nbsp;&nbsp;<span class="cmtt-10" style="font-family: monospace; ">else</span>&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmtt-10" style="font-family: monospace; ">for</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">j</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">=</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">i</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">to</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">N</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">do</span>&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmtt-10" style="font-family: monospace; ">swap(A[i],</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">A[j])</span>&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmtt-10" style="font-family: monospace; ">permute(i+1)</span>&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="cmtt-10" style="font-family: monospace; ">swap(A[i],</span>&nbsp;<span class="cmtt-10" style="font-family: monospace; ">A[j])</span>&nbsp;</pre>
</span><font class="Apple-style-span" face="Arial" size="3"><span class="Apple-style-span" style="line-height: normal; ">
<div>
<div></div>
</div>
</span></font>
<img src ="http://www.cppblog.com/zerolee/aggbug/156428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-09-21 15:22 <a href="http://www.cppblog.com/zerolee/archive/2011/09/21/156428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>快速排序C++实现</title><link>http://www.cppblog.com/zerolee/archive/2011/09/16/155940.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Fri, 16 Sep 2011 06:15:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/09/16/155940.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/155940.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/09/16/155940.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/155940.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/155940.html</trackback:ping><description><![CDATA[2种方案的C++实现：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp; 1</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">vector</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">iterator</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">algorithm</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<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 /></span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cstdlib</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">ctime</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000; ">#include&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">cassert</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;printv(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v)<br /></span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::copy(v.begin(),&nbsp;v.end(),&nbsp;std::ostream_iterator</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(std::cout,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /></span><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;std::endl;<br /></span><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;printv(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;h)<br /></span><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::copy(v.begin()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">l,&nbsp;v.begin()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">h</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;std::ostream_iterator</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(std::cout,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /></span><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;std::endl;<br /></span><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;exchange(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;a,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;b)<br /></span><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;tmp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a;<br /></span><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;b;<br /></span><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;tmp;<br /></span><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;partition1(std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;h)<br /></span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;30</span>&nbsp;<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;l</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pivot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v[h];<br /></span><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&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;l;<br /></span><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(j&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;h)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(v[j]&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;pivot)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exchange(v[i],&nbsp;v[j]);<br /></span><span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;exchange(v[i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">],&nbsp;v[h]);<br /></span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;i</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;42</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;partition2(std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;h)<br /></span><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;l</span><span style="color: #000000; ">+</span><span style="color: #000000; ">(h</span><span style="color: #000000; ">-</span><span style="color: #000000; ">l)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<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;l;<br /></span><span style="color: #008080; ">&nbsp;48</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&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;h;<br /></span><span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;pivot&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;v[m];<br /></span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<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; ">1</span><span style="color: #000000; ">)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(v[i]&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;pivot)&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;53</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">while</span><span style="color: #000000; ">&nbsp;(v[j]&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;pivot)&nbsp;j</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;54</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(</span><span style="color: #000000; ">!</span><span style="color: #000000; ">(i</span><span style="color: #000000; ">&lt;</span>j))&nbsp;{<font class="Apple-style-span" color="#008080"><br /></font><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;j;<br /></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exchange(v[i],&nbsp;v[j]);<br /></span><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">;j</span><span style="color: #000000; ">--</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">&nbsp;62</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;63</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;myQuickSort1(std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;h)<br /></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;Please&nbsp;note,&nbsp;returned&nbsp;m&nbsp;is&nbsp;the&nbsp;loc&nbsp;of&nbsp;pivot,<br /></span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;in&nbsp;below&nbsp;myQuickSort1,&nbsp;can&nbsp;remove&nbsp;m,&nbsp;since&nbsp;left&nbsp;of&nbsp;m,&nbsp;all&nbsp;&lt;=&nbsp;pivot<br /></span><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;right&nbsp;of&nbsp;m,&nbsp;all&nbsp;&gt;=&nbsp;pivot<br /></span><span style="color: #008080; ">&nbsp;70</span>&nbsp;<span style="color: #008000; ">&nbsp;</span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;h)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;partition1(v,&nbsp;l,&nbsp;h);<br /></span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myQuickSort1(v,&nbsp;l,&nbsp;m</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myQuickSort1(v,&nbsp;m</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;h);<br /></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;myQuickSort2(std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;&amp;</span><span style="color: #000000; ">&nbsp;v,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;l,&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;h)<br /></span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #000000; "></span><span style="color: #008000; ">/*</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #008000; ">&nbsp;if&nbsp;partition2&nbsp;return&nbsp;i,&nbsp;please&nbsp;call&nbsp;below<br /></span><span style="color: #008080; ">&nbsp;82</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;myQuickSort2(v,&nbsp;l,&nbsp;m-1);<br /></span><span style="color: #008080; ">&nbsp;83</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;myQuickSort2(v,&nbsp;m,&nbsp;h);<br /></span><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #008000; ">&nbsp;else&nbsp;if&nbsp;it&nbsp;return&nbsp;j,&nbsp;please&nbsp;call&nbsp;below<br /></span><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;myQuickSort2(v,&nbsp;l,&nbsp;m);<br /></span><span style="color: #008080; ">&nbsp;86</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;myQuickSort2(v,&nbsp;m+1,&nbsp;h);<br /></span><span style="color: #008080; ">&nbsp;87</span>&nbsp;<span style="color: #008000; "></span><span style="color: #008000; ">*/</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;(l&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">&nbsp;h)&nbsp;{<br /></span><span style="color: #008080; ">&nbsp;89</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;m&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;partition2(v,&nbsp;l,&nbsp;h);<br /></span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myQuickSort2(v,&nbsp;l,&nbsp;m);<br /></span><span style="color: #008080; ">&nbsp;91</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myQuickSort2(v,&nbsp;m</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,&nbsp;h);<br /></span><span style="color: #008080; ">&nbsp;92</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;main()<br /></span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;97</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&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;</span><span style="color: #000000; ">100</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;srand(time(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">));<br /></span><span style="color: #008080; ">100</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::vector</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;v,&nbsp;vtmp;<br /></span><span style="color: #008080; ">101</span>&nbsp;<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;N;&nbsp;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">102</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v.push_back(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">(rand()</span><span style="color: #000000; ">%</span><span style="color: #000000; ">N));<br /></span><span style="color: #008080; ">103</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;vtmp.insert(vtmp.end(),&nbsp;v.begin(),&nbsp;v.end());<br /></span><span style="color: #008080; ">104</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Original&nbsp;data&nbsp;sequence&nbsp;is:\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">105</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::copy(v.begin(),&nbsp;v.end(),&nbsp;std::ostream_iterator</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(std::cout,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /></span><span style="color: #008080; ">106</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;std::endl;<br /></span><span style="color: #008080; ">107</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;myQuickSort1(v,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;N</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">108</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">After&nbsp;quicksort(1),&nbsp;the&nbsp;data&nbsp;sequence&nbsp;is:\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">109</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::copy(v.begin(),&nbsp;v.end(),&nbsp;std::ostream_iterator</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(std::cout,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /></span><span style="color: #008080; ">110</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;std::endl;<br /></span><span style="color: #008080; ">111</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">112</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;myQuickSort2(vtmp,&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,&nbsp;N</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br /></span><span style="color: #008080; ">113</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">After&nbsp;quicksort(2),&nbsp;the&nbsp;data&nbsp;sequence&nbsp;is:\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">114</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::copy(vtmp.begin(),&nbsp;vtmp.end(),&nbsp;std::ostream_iterator</span><span style="color: #000000; ">&lt;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(std::cout,&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">"</span><span style="color: #000000; ">));<br /></span><span style="color: #008080; ">115</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000; ">&lt;&lt;</span><span style="color: #000000; ">&nbsp;std::endl;<br /></span><span style="color: #008080; ">116</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">117</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;assert(v</span><span style="color: #000000; ">==</span><span style="color: #000000; ">vtmp);<br /></span><span style="color: #008080; ">118</span>&nbsp;<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; ">;<br /></span><span style="color: #008080; ">119</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">120</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.cppblog.com/zerolee/aggbug/155940.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-09-16 14:15 <a href="http://www.cppblog.com/zerolee/archive/2011/09/16/155940.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>堆排序算法的一个实现</title><link>http://www.cppblog.com/zerolee/archive/2011/03/25/142686.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Fri, 25 Mar 2011 01:32:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/03/25/142686.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/142686.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/03/25/142686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/142686.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/142686.html</trackback:ping><description><![CDATA[Pseudcode<span style="font-weight: bold;"><br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">function&nbsp;heapSort(a,&nbsp;count)&nbsp;</span><span style="color: #0000ff; font-weight: normal;">is</span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">&nbsp;2</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input:&nbsp;&nbsp;an&nbsp;unordered&nbsp;array&nbsp;a&nbsp;of&nbsp;length&nbsp;count<br></span><span style="color: #008080; font-weight: normal;">&nbsp;3</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;<br></span><span style="color: #008080; font-weight: normal;">&nbsp;4</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first&nbsp;place&nbsp;a&nbsp;</span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;">&nbsp;max-heap&nbsp;order)<br></span><span style="color: #008080; font-weight: normal;">&nbsp;5</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;heapify(a,&nbsp;count)<br></span><span style="color: #008080; font-weight: normal;">&nbsp;6</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;<br></span><span style="color: #008080; font-weight: normal;">&nbsp;7</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;:=&nbsp;count-1&nbsp;</span><span style="color: #008000; font-weight: normal;">//in&nbsp;languages&nbsp;with&nbsp;zero-based&nbsp;arrays&nbsp;the&nbsp;children&nbsp;are&nbsp;2*i+1&nbsp;and&nbsp;2*i+2<br></span><span style="color: #008080; font-weight: normal;">&nbsp;8</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #008000; font-weight: normal;"></span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-weight: normal;">while</span><span style="color: #000000; font-weight: normal;">&nbsp;end&nbsp;&gt;&nbsp;0&nbsp;</span><span style="color: #0000ff; font-weight: normal;">do</span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">&nbsp;9</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(swap&nbsp;the&nbsp;root(maximum&nbsp;value)&nbsp;of&nbsp;the&nbsp;heap&nbsp;with&nbsp;the&nbsp;last&nbsp;element&nbsp;of&nbsp;the&nbsp;heap)<br></span><span style="color: #008080; font-weight: normal;">10</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(a[end],&nbsp;a[0])<br></span><span style="color: #008080; font-weight: normal;">11</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(put&nbsp;the&nbsp;heap&nbsp;back&nbsp;</span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;">&nbsp;max-heap&nbsp;order)<br></span><span style="color: #008080; font-weight: normal;">12</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;siftDown(a,&nbsp;0,&nbsp;end-1)<br></span><span style="color: #008080; font-weight: normal;">13</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(decrease&nbsp;the&nbsp;size&nbsp;of&nbsp;the&nbsp;heap&nbsp;by&nbsp;one&nbsp;so&nbsp;that&nbsp;the&nbsp;previous&nbsp;max&nbsp;value&nbsp;will<br></span><span style="color: #008080; font-weight: normal;">14</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stay&nbsp;</span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;">&nbsp;its&nbsp;proper&nbsp;placement)<br></span><span style="color: #008080; font-weight: normal;">15</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;:=&nbsp;end&nbsp;-&nbsp;1<br></span><span style="color: #008080; font-weight: normal;">16</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;<br></span><span style="color: #008080; font-weight: normal;">17</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;function&nbsp;heapify(a,&nbsp;count)&nbsp;</span><span style="color: #0000ff; font-weight: normal;">is</span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">18</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(start&nbsp;</span><span style="color: #0000ff; font-weight: normal;">is</span><span style="color: #000000; font-weight: normal;">&nbsp;assigned&nbsp;the&nbsp;index&nbsp;</span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;">&nbsp;a&nbsp;of&nbsp;the&nbsp;last&nbsp;parent&nbsp;node)<br></span><span style="color: #008080; font-weight: normal;">19</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;:=&nbsp;count&nbsp;/&nbsp;2&nbsp;-&nbsp;1<br></span><span style="color: #008080; font-weight: normal;">20</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080; font-weight: normal;">21</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-weight: normal;">while</span><span style="color: #000000; font-weight: normal;">&nbsp;start&nbsp;&#8805;&nbsp;0&nbsp;</span><span style="color: #0000ff; font-weight: normal;">do</span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">22</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(sift&nbsp;down&nbsp;the&nbsp;node&nbsp;at&nbsp;index&nbsp;start&nbsp;to&nbsp;the&nbsp;proper&nbsp;place&nbsp;such&nbsp;that&nbsp;all&nbsp;nodes&nbsp;below<br></span><span style="color: #008080; font-weight: normal;">23</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;start&nbsp;index&nbsp;are&nbsp;</span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;">&nbsp;heap&nbsp;order)<br></span><span style="color: #008080; font-weight: normal;">24</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;siftDown(a,&nbsp;start,&nbsp;count-1)<br></span><span style="color: #008080; font-weight: normal;">25</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;:=&nbsp;start&nbsp;-&nbsp;1<br></span><span style="color: #008080; font-weight: normal;">26</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(after&nbsp;sifting&nbsp;down&nbsp;the&nbsp;root&nbsp;all&nbsp;nodes/elements&nbsp;are&nbsp;</span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;">&nbsp;heap&nbsp;order)<br></span><span style="color: #008080; font-weight: normal;">27</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;<br></span><span style="color: #008080; font-weight: normal;">28</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;function&nbsp;siftDown(a,&nbsp;start,&nbsp;end)&nbsp;</span><span style="color: #0000ff; font-weight: normal;">is</span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">29</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input:&nbsp;&nbsp;end&nbsp;represents&nbsp;the&nbsp;limit&nbsp;of&nbsp;how&nbsp;far&nbsp;down&nbsp;the&nbsp;heap<br></span><span style="color: #008080; font-weight: normal;">30</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;to&nbsp;sift.<br></span><span style="color: #008080; font-weight: normal;">31</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;:=&nbsp;start<br></span><span style="color: #008080; font-weight: normal;">32</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">33</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-weight: normal;">while</span><span style="color: #000000; font-weight: normal;">&nbsp;root&nbsp;*&nbsp;2&nbsp;+&nbsp;1&nbsp;&#8804;&nbsp;end&nbsp;</span><span style="color: #0000ff; font-weight: normal;">do</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(While&nbsp;the&nbsp;root&nbsp;has&nbsp;at&nbsp;least&nbsp;one&nbsp;child)<br></span><span style="color: #008080; font-weight: normal;">34</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child&nbsp;:=&nbsp;root&nbsp;*&nbsp;2&nbsp;+&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(root*2&nbsp;+&nbsp;1&nbsp;points&nbsp;to&nbsp;the&nbsp;left&nbsp;child)<br></span><span style="color: #008080; font-weight: normal;">35</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap&nbsp;:=&nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keeps&nbsp;track&nbsp;of&nbsp;child&nbsp;to&nbsp;swap&nbsp;with)<br></span><span style="color: #008080; font-weight: normal;">36</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(check&nbsp;</span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;">&nbsp;root&nbsp;</span><span style="color: #0000ff; font-weight: normal;">is</span><span style="color: #000000; font-weight: normal;">&nbsp;smaller&nbsp;than&nbsp;left&nbsp;child)<br></span><span style="color: #008080; font-weight: normal;">37</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;">&nbsp;a[swap]&nbsp;&lt;&nbsp;a[child]<br></span><span style="color: #008080; font-weight: normal;">38</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap&nbsp;:=&nbsp;child<br></span><span style="color: #008080; font-weight: normal;">39</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(check&nbsp;</span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;">&nbsp;right&nbsp;child&nbsp;exists,&nbsp;and&nbsp;</span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;">&nbsp;it's&nbsp;bigger&nbsp;than&nbsp;what&nbsp;we're&nbsp;currently&nbsp;swapping&nbsp;with)<br></span><span style="color: #008080; font-weight: normal;">40</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;">&nbsp;child&nbsp;&lt;&nbsp;end&nbsp;and&nbsp;a[swap]&nbsp;&lt;&nbsp;a[child+1]<br></span><span style="color: #008080; font-weight: normal;">41</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap&nbsp;:=&nbsp;child&nbsp;+&nbsp;1<br></span><span style="color: #008080; font-weight: normal;">42</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(check&nbsp;</span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;">&nbsp;we&nbsp;need&nbsp;to&nbsp;swap&nbsp;at&nbsp;all)<br></span><span style="color: #008080; font-weight: normal;">43</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;">&nbsp;swap&nbsp;!=&nbsp;root<br></span><span style="color: #008080; font-weight: normal;">44</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap(a[root],&nbsp;a[swap])<br></span><span style="color: #008080; font-weight: normal;">45</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;:=&nbsp;swap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(repeat&nbsp;to&nbsp;</span><span style="color: #0000ff; font-weight: normal;">continue</span><span style="color: #000000; font-weight: normal;">&nbsp;sifting&nbsp;down&nbsp;the&nbsp;child&nbsp;now)<br></span><span style="color: #008080; font-weight: normal;">46</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-weight: normal;">else</span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">47</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; font-weight: normal;">return</span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">48</span><span style="font-weight: normal;">&nbsp;</span><span style="color: #000000; font-weight: normal;"></span></div>
<br style="font-weight: normal;"><span style="font-weight: normal;">C++ 实现</span><br style="font-weight: normal;">
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; font-weight: normal;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;build&nbsp;one&nbsp;maximum&nbsp;heap</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">template&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">typename&nbsp;T</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;heapsort(std::vector</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">T</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">&nbsp;a)<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;sz&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)a.size();<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<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;sz</span><span style="color: #000000;">/</span><span style="color: #000000;">2</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;i</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;percDown(a,&nbsp;i,&nbsp;sz);<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">build&nbsp;heap&nbsp;is&nbsp;done.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<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;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;sz</span><span style="color: #000000;">-</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;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;j</span><span style="color: #000000;">--</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap(a[</span><span style="color: #000000;">0</span><span style="color: #000000;">],&nbsp;a[j]);<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;percDown(a,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;j);<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">inline&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;leftChild(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i)<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">17</span>&nbsp;<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;">2</span><span style="color: #000000;">*</span><span style="color: #000000;">i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">template&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">typename&nbsp;T</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;percDown(std::vector</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">T</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">&nbsp;a,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;child;<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;tmp;<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(tmp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a[i];&nbsp;leftChild(i)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;n;&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;child)&nbsp;{<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;leftChild(i);<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(child&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;n</span><span style="color: #000000;">-</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;a[child]&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;a[child</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">])<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(tmp&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;a[child])<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a[child];<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;a[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tmp;<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;"></span></div>
</span><span style="font-weight: bold;"><br></span> <img src ="http://www.cppblog.com/zerolee/aggbug/142686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-25 09:32 <a href="http://www.cppblog.com/zerolee/archive/2011/03/25/142686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>删除与某个字符相邻且相同的字符</title><link>http://www.cppblog.com/zerolee/archive/2011/03/22/142504.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Tue, 22 Mar 2011 10:40:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/03/22/142504.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/142504.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/03/22/142504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/142504.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/142504.html</trackback:ping><description><![CDATA[删除与某个字符相邻且相同的字符，如，abcddef，删除相邻的相同字符d后变为： abcdef。<br>要求：输入字符串,输出删除后的结果。<br>参考STL算法： unique/unique_copy<br><br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;deldupchar(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;s)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;i,&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">j;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(s &amp;&amp; *s!='\0')&nbsp;{<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s;&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;s</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&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;">j</span><span style="color: #000000;">!=</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<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;(</span><span style="color: #000000;">*</span><span style="color: #000000;">i</span><span style="color: #000000;">!=*</span><span style="color: #000000;">j)<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*++</span><span style="color: #000000;">i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">j;<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*++</span><span style="color: #000000;">i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;"></span></div>
<br><img src ="http://www.cppblog.com/zerolee/aggbug/142504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-22 18:40 <a href="http://www.cppblog.com/zerolee/archive/2011/03/22/142504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>selection algorithm to select nth small elements based on partition</title><link>http://www.cppblog.com/zerolee/archive/2011/03/17/142073.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Thu, 17 Mar 2011 12:20:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/03/17/142073.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/142073.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/03/17/142073.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/142073.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/142073.html</trackback:ping><description><![CDATA[http://en.wikipedia.org/wiki/Selection_algorithm<br>1. partition algorithm<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&nbsp;function&nbsp;partition(list,&nbsp;left,&nbsp;right,&nbsp;pivotIndex)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pivotValue&nbsp;:=&nbsp;list[pivotIndex]<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swap&nbsp;list[pivotIndex]&nbsp;and&nbsp;list[right]&nbsp;&nbsp;//&nbsp;Move&nbsp;pivot&nbsp;to&nbsp;end<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;storeIndex&nbsp;:=&nbsp;left<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;i&nbsp;from&nbsp;left&nbsp;to&nbsp;right-1<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;list[i]&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">&nbsp;pivotValue<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #800000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;"><span style="color: #080000;">swap&nbsp;list[storeIndex]&nbsp;and&nbsp;list[i]</span><br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #080000;">storeIndex&nbsp;:</span></span><span style="color: #080000;">=&nbsp;storeIndex&nbsp;</span><span style="color: #ff0000;"><span style="color: #080000;">+&nbsp;1</span><br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #080000;">swap&nbsp;list[right]&nbsp;and&nbsp;list[storeIndex]&nbsp;&nbsp;//&nbsp;Move&nbsp;pivot&nbsp;to&nbsp;its&nbsp;final&nbsp;place</span><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #080000;">return&nbsp;storeIndex</span></span></div>
<br>2. selection algorithm<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">function&nbsp;select(list,&nbsp;left,&nbsp;right,&nbsp;k)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select&nbsp;pivotIndex&nbsp;between&nbsp;left&nbsp;and&nbsp;right<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pivotNewIndex&nbsp;:=&nbsp;partition(list,&nbsp;left,&nbsp;right,&nbsp;pivotIndex)<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;k&nbsp;=&nbsp;pivotNewIndex&nbsp;-&nbsp;left&nbsp;+&nbsp;1<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;list[pivotNewIndex]<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;k&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">&nbsp;pivotNewIndex&nbsp;</span><span style="color: #ff0000;">-&nbsp;<span style="color: #080000;">left&nbsp;+&nbsp;1</span><br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #080000;">right</span>&nbsp;:</span><span style="color: #0000ff;">=&nbsp;pivotNewIndex-1<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;"><span style="color: #080000;">else</span><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #080000;">&nbsp;left</span>&nbsp;:</span><span style="color: #0000ff;">=&nbsp;pivotNewIndex+1<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #0000ff;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000;"><span style="color: #080000;">k</span>&nbsp;:</span><span style="color: #0000ff;">=&nbsp;k&nbsp;</span><span style="color: #ff0000;">-&nbsp;<span style="color: #080000;">pivotNewIndex</span>&nbsp;&nbsp;&nbsp;&nbsp;</span></div>
<br>&gt;&gt; <span style="color: #f40000;">In above last statement, one bug. Should be </span><br style="color: #f40000;"><span style="color: #f40000;">&nbsp;&nbsp; k := k-pivotNewIndex-left+1</span><br style="color: #f40000;"><span style="color: #f40000;">&nbsp;&nbsp; left := pivotNewIndex+1</span><br><br>3. code <br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;partition(std::vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">&nbsp;a,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;l,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;r)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<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;l,&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;l;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a[r];<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">r)&nbsp;{<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(a[j]&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;p)&nbsp;{<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap(a[i],&nbsp;a[j]);<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::swap(a[r],&nbsp;a[i]);<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;i;<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;select_kth_smallest(std::vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">&nbsp;a,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;l,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;r,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;k)<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">18</span>&nbsp;<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;">1</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;cut&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;partition(a,&nbsp;l,&nbsp;r);<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#if</span><span style="color: #000000;">&nbsp;0</span><span style="color: #000000;"><br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::copy(a.begin()</span><span style="color: #000000;">+</span><span style="color: #000000;">l,&nbsp;a.begin()</span><span style="color: #000000;">+</span><span style="color: #000000;">cut,&nbsp;std::ostream_iterator</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(std::cout,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&lt;=</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;a[cut]&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">=&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::copy(a.begin()</span><span style="color: #000000;">+</span><span style="color: #000000;">cut</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;a.begin()</span><span style="color: #000000;">+</span><span style="color: #000000;">r</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;std::ostream_iterator</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(std::cout,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">cut(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">cut</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">),k(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">k</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">),l(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">l</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">),r(</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">r</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">)\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">#endif</span><span style="color: #000000;"><br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(cut</span><span style="color: #000000;">-</span><span style="color: #000000;">l</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">==</span><span style="color: #000000;">k)<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&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;(k&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;cut</span><span style="color: #000000;">-</span><span style="color: #000000;">l</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cut</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;k</span><span style="color: #000000;">-</span><span style="color: #000000;">cut</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">+</span><span style="color: #000000;">l;<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;l&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;cut</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;"></span></div>
<br> <img src ="http://www.cppblog.com/zerolee/aggbug/142073.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-17 20:20 <a href="http://www.cppblog.com/zerolee/archive/2011/03/17/142073.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从尾到头输出单链表的值</title><link>http://www.cppblog.com/zerolee/archive/2011/03/15/141866.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Tue, 15 Mar 2011 05:51:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/03/15/141866.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/141866.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/03/15/141866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/141866.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/141866.html</trackback:ping><description><![CDATA[题目：输入一个单链表的头结点，从尾到头反过来输出每个节点的值。链表节点的定义如下：<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>&nbsp;<span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;ListNode&nbsp;{<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m_nKey;<br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;ListNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;m_pNext;<br></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">};</span></div>
<br>理解题目的意思，只需要反转输出每个几点的值就可以了。并不需要将单链表进行反转。<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>&nbsp;<span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;printSingleListReversely(ListNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;phead)&nbsp;<br></span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">phead</span><span style="color: #000000;">!=</span><span style="color: #000000;">NULL)&nbsp;{<br></span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printStringListReversely(phead</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pNext);<br></span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;phead</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_nKey);<br></span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">}</span></div>
<br>延伸：1) 从尾到头输出字符串; 2）定义个函数求字符串的长度，函数内不能声明任何变量。<br><br><img src ="http://www.cppblog.com/zerolee/aggbug/141866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-15 13:51 <a href="http://www.cppblog.com/zerolee/archive/2011/03/15/141866.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>腾讯面试题</title><link>http://www.cppblog.com/zerolee/archive/2011/03/11/141588.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Fri, 11 Mar 2011 11:20:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/03/11/141588.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/141588.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/03/11/141588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/141588.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/141588.html</trackback:ping><description><![CDATA[一个文件中有40亿个整数，每个整数为四个字节，内存为1GB，写出一个算法：求出这个文件里的整数里不包含的一个整数<br>下面的代码片段仅仅是一个样例。<br>4个字节的整数最大可表示为2^32=4294967296, 一个数一个数的读入内存，建立一个bit map，共需要4294967296个bits(也就是0.5G字节的内存，并没有超过1G内存的限制)，读入每一个数，置相应的bit为1。<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&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;</span><span style="color: #000000;">20</span><span style="color: #000000;">;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;#&nbsp;of&nbsp;number</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;M&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1000</span><span style="color: #000000;">;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;number&nbsp;range</span><span style="color: #008000;"><br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;a(N);&nbsp; // can be imported from external file number by number<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<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;N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[i]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)rand()</span><span style="color: #000000;">%</span><span style="color: #000000;">M;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::copy(a.begin(),&nbsp;a.end(),&nbsp;std::ostream_iterator</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(std::cout,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000;">// bit map setup for existence of each number<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;nbytes&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;M</span><span style="color: #000000;">%</span><span style="color: #000000;">8</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">?</span><span style="color: #000000;">&nbsp;(M</span><span style="color: #000000;">/</span><span style="color: #000000;">8</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;:&nbsp;(M</span><span style="color: #000000;">/</span><span style="color: #000000;">8</span><span style="color: #000000;">);<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">nbytes&nbsp;=&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;nbytes&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;p&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;">&nbsp;[nbytes];<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(p,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)</span><span style="color: #000000;">*</span><span style="color: #000000;">nbytes);<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">15</span>&nbsp;<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;N;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;index&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a[i]</span><span style="color: #000000;">/</span><span style="color: #000000;">8</span><span style="color: #000000;">;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;bitpos&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a[i]</span><span style="color: #000000;">%</span><span style="color: #000000;">8</span><span style="color: #000000;">;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;tmp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p</span><span style="color: #000000;">+</span><span style="color: #000000;">index;<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">tmp&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;&lt;</span><span style="color: #000000;">&nbsp;bitpos;<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">std::cout&nbsp;&lt;&lt;&nbsp;"bit&nbsp;pos&nbsp;set&nbsp;to&nbsp;1&nbsp;:&nbsp;"&nbsp;&lt;&lt;&nbsp;8*index+bitpos&nbsp;&lt;&lt;&nbsp;"\n";</span><span style="color: #008000;"><br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">22</span>&nbsp;<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;nbytes</span><span style="color: #000000;">-</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;i</span><span style="color: #000000;">--</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%02X&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">)</span><span style="color: #000000;">*</span><span style="color: #000000;">(p</span><span style="color: #000000;">+</span><span style="color: #000000;">i)</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">0xFF</span><span style="color: #000000;">);<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]&nbsp;p;<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;"></span></div>
<br> <img src ="http://www.cppblog.com/zerolee/aggbug/141588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-11 19:20 <a href="http://www.cppblog.com/zerolee/archive/2011/03/11/141588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>非printf形式的十六进制和二进制打印（雅虎面试题）</title><link>http://www.cppblog.com/zerolee/archive/2011/03/11/141586.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Fri, 11 Mar 2011 11:14:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/03/11/141586.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/141586.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/03/11/141586.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/141586.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/141586.html</trackback:ping><description><![CDATA[编程实现：把十进制数(long型)分别以二进制和十六进制形式输出，不能使用printf系列<br><br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">template&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">typename&nbsp;T</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;displayHexBin(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;T</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;v)<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;c2h[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">0123456789ABCDEF</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;c2b[]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">01</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">v;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;buf&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;">&nbsp;[</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(T)</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;">];<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;ptmp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;buf;<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(T)</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">11</span>&nbsp;<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: #0000ff;">sizeof</span><span style="color: #000000;">(T);&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">p)&nbsp;{<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">buf</span><span style="color: #000000;">++</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;c2h[</span><span style="color: #000000;">*</span><span style="color: #000000;">p&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">4</span><span style="color: #000000;">];<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">buf</span><span style="color: #000000;">++</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;c2h[</span><span style="color: #000000;">*</span><span style="color: #000000;">p&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0x0F</span><span style="color: #000000;">];<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">buf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">hex&nbsp;format&nbsp;displayed&nbsp;as&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ptmp);<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]&nbsp;ptmp;<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;">)</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">v;&nbsp;p&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;p&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(T)</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;ptmp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;buf&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;">&nbsp;[</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(T)</span><span style="color: #000000;">*</span><span style="color: #000000;">8</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">21</span>&nbsp;<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: #0000ff;">sizeof</span><span style="color: #000000;">(T);&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">--</span><span style="color: #000000;">p)&nbsp;{<br></span><span style="color: #008080;">22</span>&nbsp;<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;</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;</span><span style="color: #000000;">8</span><span style="color: #000000;">;&nbsp;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">23</span>&nbsp;<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;">buf</span><span style="color: #000000;">++</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;c2b[(</span><span style="color: #000000;">*</span><span style="color: #000000;">p&nbsp;</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">7</span><span style="color: #000000;">-</span><span style="color: #000000;">j))&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0x1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">buf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">\0</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">bin&nbsp;format&nbsp;displayed&nbsp;as&nbsp;%s\n</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ptmp);<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;[]&nbsp;ptmp;<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;"></span></div>
<br><br><img src ="http://www.cppblog.com/zerolee/aggbug/141586.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-11 19:14 <a href="http://www.cppblog.com/zerolee/archive/2011/03/11/141586.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>百度的面试题解答</title><link>http://www.cppblog.com/zerolee/archive/2011/03/11/141584.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Fri, 11 Mar 2011 11:10:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2011/03/11/141584.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/141584.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2011/03/11/141584.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/141584.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/141584.html</trackback:ping><description><![CDATA[给定一个存放整数的数组，重新排列数组使得数组左边为奇数，右边为偶数。<br>要求：空间复杂度O(1)，时间复杂度为O（n）。<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;func(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;(n</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">; // n%2 is more expensive<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;group_oddeven(std::vector</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&gt;&amp;</span><span style="color: #000000;">&nbsp;a,&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">*</span><span style="color: #000000;">func)(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">))<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<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;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;j&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;a.size()</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;buf&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;j)&nbsp;{<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">func(a[i]))&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;odd,&nbsp;move&nbsp;forward</span><span style="color: #008000;"><br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;&nbsp;}<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(func(a[j]))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;even,&nbsp;move&nbsp;backward</span><span style="color: #008000;"><br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;j</span><span style="color: #000000;">--</span><span style="color: #000000;">;&nbsp;</span><span style="color: #0000ff;">continue</span><span style="color: #000000;">;&nbsp;}<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::swap(a[i</span><span style="color: #000000;">++</span><span style="color: #000000;">],&nbsp;a[j</span><span style="color: #000000;">--</span><span style="color: #000000;">]);<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;"></span></div>
<br> <img src ="http://www.cppblog.com/zerolee/aggbug/141584.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-11 19:10 <a href="http://www.cppblog.com/zerolee/archive/2011/03/11/141584.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>设计包含min函数的栈</title><link>http://www.cppblog.com/zerolee/archive/2010/11/26/134718.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Fri, 26 Nov 2010 04:13:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2010/11/26/134718.html</guid><description><![CDATA[定义栈的数据结构，要求添加一个min的函数，能够得到栈的最下元素。<br>要求函数min, push, pop的时间复杂度都是O(1)<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: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;stackmin&nbsp;{<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;data[N];<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;minidx[N];<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;top;<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;stackmin()<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;top(</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::memset(minidx,&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</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;">N);<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;::memset(data,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</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;">N);<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;push(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;d)<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(top&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;N</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">)<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data[</span><span style="color: #000000;">++</span><span style="color: #000000;">top]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;d;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(top</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minidx[top]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&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;(data[minidx[top</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">]]&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;d)<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minidx[top]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;top;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minidx[top]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;minidx[top</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;pop(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;d)<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(top</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data[top];<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;minidx[top]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top</span><span style="color: #000000;">--</span><span style="color: #000000;">;<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;min(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;m)<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(top</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;data[minidx[top]];<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;print()<br></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008080;">48</span>&nbsp;<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;top;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;data[i]&nbsp;</span><span style="color: #000000;">&lt;&lt;</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;">;<br></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;"></span></div>
<br>借助另一个内部的数组，用来存储每次push元素之后的栈最小值的索引，便可很方便的在O(1)的时间内完成以上三种操作。一种空间换时间的方法。<br><br><br><img src ="http://www.cppblog.com/zerolee/aggbug/134718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2010-11-26 12:13 <a href="http://www.cppblog.com/zerolee/archive/2010/11/26/134718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Calcuate power n of x recursively</title><link>http://www.cppblog.com/zerolee/archive/2010/10/18/130297.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Mon, 18 Oct 2010 09:19:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2010/10/18/130297.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/130297.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2010/10/18/130297.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/130297.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/130297.html</trackback:ping><description><![CDATA[<span>Given x and n, calculate it</span>s power n:<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;power(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;x,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(n</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&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></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;(n</span><span style="color: #000000;">%</span><span style="color: #000000;">2</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;power(x</span><span style="color: #000000;">*</span><span style="color: #000000;">x,&nbsp;n</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;x</span><span style="color: #000000;">*</span><span style="color: #000000;">power(x</span><span style="color: #000000;">*</span><span style="color: #000000;">x,&nbsp;n</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;<br></span><span style="color: #008080;">11</span><span style="color: #000000;"></span></div>
<br><br><img src ="http://www.cppblog.com/zerolee/aggbug/130297.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2010-10-18 17:19 <a href="http://www.cppblog.com/zerolee/archive/2010/10/18/130297.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Convert one binary search tree to double-linked list</title><link>http://www.cppblog.com/zerolee/archive/2010/10/18/130252.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Mon, 18 Oct 2010 04:30:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2010/10/18/130252.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/130252.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2010/10/18/130252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/130252.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/130252.html</trackback:ping><description><![CDATA[Give one binary search tree, and convert it to one double-linked list<br>Cpp code demo as below:
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;BSTreeNode<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;m_value;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BSTreeNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;m_pLeft;<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BSTreeNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;m_pRight;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">BSTreeNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;convert(BSTreeNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;phead,&nbsp;</span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;asRight)<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">phead)<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;NULL;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BSTreeNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pLeft&nbsp;</span><span style="color: #000000;">=</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;">pRight</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(phead</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pLeft)<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLeft&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;convert(phead</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pLeft,&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pLeft)&nbsp;{<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pLeft</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pRight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;phead;<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phead</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pLeft&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pLeft;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(phead</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pRight)<br></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;convert(phead</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pRight,&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(pRight)&nbsp;{<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pRight</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pLeft&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;phead;<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phead</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pRight&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pRight;<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;BSTreeNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;ptmp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;phead;<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(asRight)&nbsp;{<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(ptmp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pLeft)&nbsp;{<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptmp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ptmp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pLeft;<br></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(ptmp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pRight)&nbsp;{<br></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ptmp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ptmp</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">m_pRight;<br></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ptmp;<br></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">BSTreeNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;convert2doublelist(BSTreeNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;phead)<br></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;convert(phead,&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;"></span></div>
<br><br><img src ="http://www.cppblog.com/zerolee/aggbug/130252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2010-10-18 12:30 <a href="http://www.cppblog.com/zerolee/archive/2010/10/18/130252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Calculate maximum sum of any subarray set</title><link>http://www.cppblog.com/zerolee/archive/2010/10/18/130251.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Mon, 18 Oct 2010 04:27:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2010/10/18/130251.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/130251.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2010/10/18/130251.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/130251.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/130251.html</trackback:ping><description><![CDATA[Given one array, and calculate its maximum sum from any sequential subarray set<br>Cpp code demo as below:<br>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;maxSubarraySum(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;arr[],&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;length,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;beg,&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">&nbsp;end)<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;assert(arr</span><span style="color: #000000;">!=</span><span style="color: #000000;">0</span><span style="color: #000000;">);<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;maxSum&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;tmpSum&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;beg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;end&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<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;length;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpSum&nbsp;</span><span style="color: #000000;">+=</span><span style="color: #000000;">&nbsp;arr[i];<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(tmpSum&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;{&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;discard&nbsp;it</span><span style="color: #008000;"><br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpSum&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;end&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(tmpSum&nbsp;</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;maxSum)&nbsp;{<br></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxSum&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tmpSum;<br></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(maxSum&nbsp;</span><span style="color: #000000;">==</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;">&nbsp;if&nbsp;all&nbsp;numbers&nbsp;are&nbsp;negative,&nbsp;return&nbsp;max&nbsp;value</span><span style="color: #008000;"><br></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxSum&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;arr[</span><span style="color: #000000;">0</span><span style="color: #000000;">];<br></span><span style="color: #008080;">20</span>&nbsp;<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;">1</span><span style="color: #000000;">;&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;length;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;">21</span>&nbsp;<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;(maxSum&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;arr[i])&nbsp;{<br></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxSum&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;arr[i];<br></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;beg&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i;&nbsp;end&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;maxSum;<br></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">}<br></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;"></span></div>
<br><br><img src ="http://www.cppblog.com/zerolee/aggbug/130251.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2010-10-18 12:27 <a href="http://www.cppblog.com/zerolee/archive/2010/10/18/130251.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>One SRC demo to reverse one single-linked list</title><link>http://www.cppblog.com/zerolee/archive/2010/10/18/130248.html</link><dc:creator>Zero Lee</dc:creator><author>Zero Lee</author><pubDate>Mon, 18 Oct 2010 04:23:00 GMT</pubDate><guid>http://www.cppblog.com/zerolee/archive/2010/10/18/130248.html</guid><wfw:comment>http://www.cppblog.com/zerolee/comments/130248.html</wfw:comment><comments>http://www.cppblog.com/zerolee/archive/2010/10/18/130248.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zerolee/comments/commentRss/130248.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zerolee/services/trackbacks/130248.html</trackback:ping><description><![CDATA[Below is one src demo to reverse one single-linked list:<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: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;listNode&nbsp;{<br></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">&nbsp;&nbsp; int</span><span style="color: #000000;">&nbsp;value;<br></span><span style="color: #008080;">&nbsp;3</span>&nbsp;&nbsp;&nbsp; <span style="color: #000000;">listNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;next;<br></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">};<br></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">listNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;reverseList(listNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;phead)<br></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">{<br></span><span style="color: #008080;">&nbsp;8</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000;">listNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pcur&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;phead;<br></span><span style="color: #008080;">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000;">listNode</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;pprev&nbsp;</span><span style="color: #000000;">=</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;">pnext&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">&nbsp;&nbsp;&nbsp; while</span><span style="color: #000000;">&nbsp;(pcur)&nbsp;{<br></span><span style="color: #008080;">11</span>&nbsp;&nbsp; &nbsp; &nbsp; <span style="color: #000000;">pnext&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pcur</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next;<br></span><span style="color: #008080;">12</span>&nbsp;&nbsp; &nbsp; &nbsp; <span style="color: #000000;">pcur</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pprev;<br></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"><br></span><span style="color: #008080;">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000;">pprev&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pcur;<br></span><span style="color: #008080;">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #000000;">pcur&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;pnext;<br></span><span style="color: #008080;">16</span>&nbsp;&nbsp;&nbsp; <span style="color: #000000;">}<br></span><span style="color: #008080;">17</span>&nbsp;&nbsp;&nbsp; <span style="color: #000000;"></span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;pcur;<br></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">}</span></div>
<br><br> <img src ="http://www.cppblog.com/zerolee/aggbug/130248.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zerolee/" target="_blank">Zero Lee</a> 2010-10-18 12:23 <a href="http://www.cppblog.com/zerolee/archive/2010/10/18/130248.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>