锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国内外成人免费激情在线视频网站,精品福利av,国产亚洲欧美激情http://www.shnenglu.com/zerolee/category/15205.htmlzh-cnSat, 16 Jun 2012 15:17:32 GMTSat, 16 Jun 2012 15:17:32 GMT60濡備綍灝嗕竴鐗囧唴瀛橀摼鎺ユ垚閾捐〃http://www.shnenglu.com/zerolee/archive/2012/06/16/179073.htmlZero LeeZero LeeSat, 16 Jun 2012 10:38:00 GMThttp://www.shnenglu.com/zerolee/archive/2012/06/16/179073.htmlhttp://www.shnenglu.com/zerolee/comments/179073.htmlhttp://www.shnenglu.com/zerolee/archive/2012/06/16/179073.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/179073.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/179073.html
榪欓噷緇欏嚭SGI STL鍐呭瓨鍒嗛厤鍣ㄧ殑涓涓畝鍗曞疄鐜幫細
棣栧厛瀹氫箟涓涓猽nion鏁版嵁緇撴瀯錛?br />
1 union obj {
2     union obj* free_list_link;
3     char client_data[1];
4 };

榪欎釜union緇撴瀯浣撶殑鏈澶уぇ灝忎負4bytes 錛堝湪32bits 騫沖彴涓婏級錛?bytes 錛堝湪64bits騫沖彴涓婏級銆?br />
鍋囪閭g墖鍐呭瓨鐨勫湴鍧涓篶hunk錛岄偅涔堟垜浠彲浠ヨ繖鏍峰仛錛?  

 1 obj* current_obj, *next_obj;
 2
 next_obj = (obj*)chunk;
 3 for (int i = 0; ; i++) {
 4     current_obj = next_obj;
 5     next_obj = (obj*)((char*)next_obj + m);
 6     if (n - 1 == i) {
 7         current_obj -> free_list_link = 0;
 8         break;
 9     } else {
10         current_obj -> free_list_link = next_obj;
11     }
12 }
13 


Zero Lee 2012-06-16 18:38 鍙戣〃璇勮
]]>
姹備竴涓鏁存暟鐨勫鉤鏂規牴紼嬪簭瀹炵幇http://www.shnenglu.com/zerolee/archive/2011/10/19/158661.htmlZero LeeZero LeeWed, 19 Oct 2011 01:37:00 GMThttp://www.shnenglu.com/zerolee/archive/2011/10/19/158661.htmlhttp://www.shnenglu.com/zerolee/comments/158661.htmlhttp://www.shnenglu.com/zerolee/archive/2011/10/19/158661.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/158661.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/158661.html閲囩敤鍔犳硶閫掑鐨勬柟寮忔潵浠f浛涔樻硶涓嶯榪涜姣旇緝錛岄掑鏄寜鐓х瓑宸暟鍒楃殑鏂瑰紡銆?br />
 1 int square(int n)
 2 {
 3     int tmp = 0;
 4     for (int i = 1; i < n; i++) {
 5         tmp += 2*(i-1)+1;
 6         if (tmp == n)
 7             return i;
 8         continue;
 9     }
10     if (n!=0) {
11         printf("no integer sqare found!\n");
12         tmp = -1;
13     }
14     return tmp;
15 }
16 


Zero Lee 2011-10-19 09:37 鍙戣〃璇勮
]]>
涓緇勬暟鐨勫叏鎺掑垪鍜岀粍鍚堢▼搴忓疄鐜?/title><link>http://www.shnenglu.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.shnenglu.com/zerolee/archive/2011/10/19/158660.html</guid><wfw:comment>http://www.shnenglu.com/zerolee/comments/158660.html</wfw:comment><comments>http://www.shnenglu.com/zerolee/archive/2011/10/19/158660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zerolee/comments/commentRss/158660.html</wfw:commentRss><trackback:ping>http://www.shnenglu.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; "> 1</span> <span style="color: #0000FF; ">void</span><span style="color: #000000; "> print(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> std::vector</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">>&</span><span style="color: #000000; "> s)<br /> </span><span style="color: #008080; "> 2</span> <span style="color: #000000; ">{<br /> </span><span style="color: #008080; "> 3</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n </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; "> 4</span> <span style="color: #000000; ">    printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d:</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; "> 5</span> <span style="color: #000000; ">    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; "> 6</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; "><</span><span style="color: #000000; "> s.size(); i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br /> </span><span style="color: #008080; "> 7</span> <span style="color: #000000; ">        printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; "> %d </span><span style="color: #000000; ">"</span><span style="color: #000000; ">, s[i]);<br /> </span><span style="color: #008080; "> 8</span> <span style="color: #000000; ">    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; "> 9</span> <span style="color: #000000; ">}<br /> </span><span style="color: #008080; ">10</span> <span style="color: #000000; "><br /> </span><span style="color: #008080; ">11</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> permutation(std::vector</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">>&</span><span style="color: #000000; "> v, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> beg, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> end)<br /> </span><span style="color: #008080; ">12</span> <span style="color: #000000; ">{<br /> </span><span style="color: #008080; ">13</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">if</span><span style="color: #000000; "> (beg </span><span style="color: #000000; ">></span><span style="color: #000000; "> end) {<br /> </span><span style="color: #008080; ">14</span> <span style="color: #000000; ">        print(v);<br /> </span><span style="color: #008080; ">15</span> <span style="color: #000000; ">        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">;<br /> </span><span style="color: #008080; ">16</span> <span style="color: #000000; ">    }<br /> </span><span style="color: #008080; ">17</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> beg; i </span><span style="color: #000000; "><=</span><span style="color: #000000; "> end; i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">) {<br /> </span><span style="color: #008080; ">18</span> <span style="color: #000000; ">        std::swap(v[i], v[beg]);<br /> </span><span style="color: #008080; ">19</span> <span style="color: #000000; ">        permutation(v, beg</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">, end); </span><span style="color: #008000; ">//</span><span style="color: #008000; "> pleate note, here always beg+1, not i+1</span><span style="color: #008000; "><br /> </span><span style="color: #008080; ">20</span> <span style="color: #008000; "></span><span style="color: #000000; ">        std::swap(v[i], v[beg]);<br /> </span><span style="color: #008080; ">21</span> <span style="color: #000000; ">    }<br /> </span><span style="color: #008080; ">22</span> <span style="color: #000000; ">}<br /> </span><span style="color: #008080; ">23</span> <span style="color: #000000; "><br /> </span><span style="color: #008080; ">24</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> pm(std::vector</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">>&</span><span style="color: #000000; "> v)<br /> </span><span style="color: #008080; ">25</span> <span style="color: #000000; ">{<br /> </span><span style="color: #008080; ">26</span> <span style="color: #000000; ">    std::copy(v.begin(), v.end(), std::ostream_iterator</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">></span><span style="color: #000000; ">(std::cout, </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; ">27</span> <span style="color: #000000; ">    printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">\nfull permulation are:\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /> </span><span style="color: #008080; ">28</span> <span style="color: #000000; ">    permutation(v, </span><span style="color: #000000; ">0</span><span style="color: #000000; ">, 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> <span style="color: #000000; ">}<br /> </span><span style="color: #008080; ">30</span> <span style="color: #000000; "><br /> </span><span style="color: #008080; ">31</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> print(</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "> std::vector</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">>&</span><span style="color: #000000; "> v, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> beg, </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> end)<br /> </span><span style="color: #008080; ">32</span> <span style="color: #000000; ">{<br /> </span><span style="color: #008080; ">33</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> n </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; ">34</span> <span style="color: #000000; ">    printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d:</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; ">35</span> <span style="color: #000000; ">    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> <span style="color: #000000; ">    std::copy(v.begin()</span><span style="color: #000000; ">+</span><span style="color: #000000; ">beg, 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; ">, std::ostream_iterator</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">></span><span style="color: #000000; ">(std::cout, </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; ">37</span> <span style="color: #000000; ">    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> <span style="color: #000000; ">}<br /> </span><span style="color: #008080; ">39</span> <span style="color: #000000; "><br /> </span><span style="color: #008080; ">40</span> <span style="color: #000000; "></span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> fullcombination(std::vector</span><span style="color: #000000; "><</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">>&</span><span style="color: #000000; "> v)<br /> </span><span style="color: #008080; ">41</span> <span style="color: #000000; ">{<br /> </span><span style="color: #008080; ">42</span> <span style="color: #000000; ">    printf(</span><span style="color: #000000; ">"</span><div style="display: inline-block; "></div>full combination<span style="color: #000000; "> are:\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br /> </span><span style="color: #008080; ">43</span> <span style="color: #000000; ">    </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (unsigned </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; "><</span><span style="color: #000000; "> v.size(); i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">) {<br /> </span><span style="color: #008080; ">44</span> <span style="color: #000000; ">        print(v, i, i);<br /> </span><span style="color: #008080; ">45</span> <span style="color: #000000; ">        </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (unsigned </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> j </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; ">; j </span><span style="color: #000000; "><</span><span style="color: #000000; "> v.size(); j</span><span style="color: #000000; ">++</span><span style="color: #000000; ">) {<br /> </span><span style="color: #008080; ">46</span> <span style="color: #000000; ">            </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> (</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> k </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; k </span><span style="color: #000000; "><</span><span style="color: #000000; "> v.size()</span><span style="color: #000000; ">-</span><span style="color: #000000; ">j; k</span><span style="color: #000000; ">++</span><span style="color: #000000; ">) {<br /> </span><span style="color: #008080; ">47</span> <span style="color: #000000; ">                std::swap(v[j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">k], v[j]);<br /> </span><span style="color: #008080; ">48</span> <span style="color: #000000; ">                print(v, i, j);<br /> </span><span style="color: #008080; ">49</span> <span style="color: #000000; ">                std::swap(v[j</span><span style="color: #000000; ">+</span><span style="color: #000000; ">k], v[j]);<br /> </span><span style="color: #008080; ">50</span> <span style="color: #000000; ">            }<br /> </span><span style="color: #008080; ">51</span> <span style="color: #000000; ">        }<br /> </span><span style="color: #008080; ">52</span> <span style="color: #000000; ">    }<br /> </span><span style="color: #008080; ">53</span> <span style="color: #000000; ">}<br /> </span><span style="color: #008080; ">54</span> <span style="color: #000000; "></span></div><img src ="http://www.shnenglu.com/zerolee/aggbug/158660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-10-19 09:34 <a href="http://www.shnenglu.com/zerolee/archive/2011/10/19/158660.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Generating Permutationshttp://www.shnenglu.com/zerolee/archive/2011/09/21/156428.htmlZero LeeZero LeeWed, 21 Sep 2011 07:22:00 GMThttp://www.shnenglu.com/zerolee/archive/2011/09/21/156428.htmlhttp://www.shnenglu.com/zerolee/comments/156428.htmlhttp://www.shnenglu.com/zerolee/archive/2011/09/21/156428.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/156428.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/156428.htmlA permutation can be obtained by selecting an element in the given set and recursively permuting the remaining elements.

 { ai,P(a1,...,ai-1,ai+1,...,aN) if N > 1 P(a1,...,aN) = aN if N = 1


 --|--|--|-| |a|b-|c-d-| a|------------b------------c-------------d --|--|--|-| ---|-|--|--| ---|--|-|--| --|--|--|-| |-|b-|c-d-| |a-|-|c-|d-| |a-|b-|-|d-| |a|b-|c-|-|

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’th step, the i’th value with the value being chosen at that stage. That approaches leaves the first subset in the first i locations of the outcome.

 --|--|--|-| |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| |-|--|--|-|
permute(i) 
   if i == N  output A[N] 
   else 
      for j = i to N do 
         swap(A[i], A[j]) 
         permute(i+1) 
         swap(A[i], A[j]) 


Zero Lee 2011-09-21 15:22 鍙戣〃璇勮
]]>
蹇熸帓搴廋++瀹炵幇http://www.shnenglu.com/zerolee/archive/2011/09/16/155940.htmlZero LeeZero LeeFri, 16 Sep 2011 06:15:00 GMThttp://www.shnenglu.com/zerolee/archive/2011/09/16/155940.htmlhttp://www.shnenglu.com/zerolee/comments/155940.htmlhttp://www.shnenglu.com/zerolee/archive/2011/09/16/155940.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/155940.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/155940.html
  1 #include <vector>
  2 #include <iterator>
  3 #include <algorithm>
  4 #include <iostream>
  5 #include <cstdlib>
  6 #include <ctime>
  7 #include <cassert>
  8 
  9 void printv(const std::vector<int>& v)
 10 {
 11     std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
 12     std::cout << std::endl;
 13 }
 14 
 15 void printv(const std::vector<int>& v, int l, int h)
 16 {
 17     std::copy(v.begin()+l, v.begin()+h+1, std::ostream_iterator<int>(std::cout, " "));
 18     std::cout << std::endl;
 19 }
 20 
 21 int exchange(int& a, int& b)
 22 {
 23     int tmp = a;
 24     a = b;
 25     b = tmp;
 26 }
 27 
 28 int partition1(std::vector<int>& v, int l, int h)
 29 {
 30     int i = l-1;
 31     int pivot = v[h];
 32     int j = l;
 33     while (j < h) {
 34         if (v[j] < pivot) {
 35             i++;
 36             exchange(v[i], v[j]);
 37         }
 38         j++;
 39     }
 40     exchange(v[i+1], v[h]);
 41     return i+1;
 42 }
 43 
 44 int partition2(std::vector<int>& v, int l, int h)
 45 {
 46     int m = l+(h-l)/2;
 47     int i = l;
 48     int j = h;
 49 
 50     int pivot = v[m];
 51     while (1) {
 52         while (v[i] < pivot) i++;
 53         while (v[j] > pivot) j--;
 54         if (!(i<j)) {
 57             return j;
 58         }
 59         exchange(v[i], v[j]);
 60         i++;j--;
 61     }
 62 }
 63 
 64 void myQuickSort1(std::vector<int>& v, int l, int h)
 65 {
 66 /*
 67   Please note, returned m is the loc of pivot,
 68   in below myQuickSort1, can remove m, since left of m, all <= pivot
 69   right of m, all >= pivot
 70  */
 71     if (l < h) {
 72         int m = partition1(v, l, h);
 73         myQuickSort1(v, l, m-1);
 74         myQuickSort1(v, m+1, h);
 75     }
 76 }
 77 
 78 void myQuickSort2(std::vector<int>& v, int l, int h)
 79 {
 80 /*
 81  if partition2 return i, please call below
 82   myQuickSort2(v, l, m-1);
 83   myQuickSort2(v, m, h);
 84  else if it return j, please call below
 85   myQuickSort2(v, l, m);
 86   myQuickSort2(v, m+1, h);
 87 */
 88     if (l < h) {
 89         int m = partition2(v, l, h);
 90         myQuickSort2(v, l, m);
 91         myQuickSort2(v, m+1, h);
 92     }
 93 }
 94 
 95 int main()
 96 {
 97 
 98     const int N = 100;
 99     srand(time(0));
100     std::vector<int> v, vtmp;
101     for (int i = 0; i < N; i++)
102         v.push_back(int(rand()%N));
103     vtmp.insert(vtmp.end(), v.begin(), v.end());
104     std::cout << "Original data sequence is:\n";
105     std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
106     std::cout << std::endl;
107     myQuickSort1(v, 0, N-1);
108     std::cout << "After quicksort(1), the data sequence is:\n";
109     std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
110     std::cout << std::endl;
111 
112     myQuickSort2(vtmp, 0, N-1);
113     std::cout << "After quicksort(2), the data sequence is:\n";
114     std::copy(vtmp.begin(), vtmp.end(), std::ostream_iterator<int>(std::cout, " "));
115     std::cout << std::endl;
116 
117     assert(v==vtmp);
118     return 0;
119 }
120 


Zero Lee 2011-09-16 14:15 鍙戣〃璇勮
]]>
鍫嗘帓搴忕畻娉曠殑涓涓疄鐜?/title><link>http://www.shnenglu.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.shnenglu.com/zerolee/archive/2011/03/25/142686.html</guid><wfw:comment>http://www.shnenglu.com/zerolee/comments/142686.html</wfw:comment><comments>http://www.shnenglu.com/zerolee/archive/2011/03/25/142686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zerolee/comments/commentRss/142686.html</wfw:commentRss><trackback:ping>http://www.shnenglu.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;"> 1</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">function heapSort(a, count) </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;"> 2</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     input:  an unordered array a of length count<br></span><span style="color: #008080; font-weight: normal;"> 3</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;"> <br></span><span style="color: #008080; font-weight: normal;"> 4</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     (first place a </span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;"> max-heap order)<br></span><span style="color: #008080; font-weight: normal;"> 5</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     heapify(a, count)<br></span><span style="color: #008080; font-weight: normal;"> 6</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;"> <br></span><span style="color: #008080; font-weight: normal;"> 7</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     end := count-1 </span><span style="color: #008000; font-weight: normal;">//in languages with zero-based arrays the children are 2*i+1 and 2*i+2<br></span><span style="color: #008080; font-weight: normal;"> 8</span><span style="font-weight: normal;"> </span><span style="color: #008000; font-weight: normal;"></span><span style="color: #000000; font-weight: normal;">     </span><span style="color: #0000ff; font-weight: normal;">while</span><span style="color: #000000; font-weight: normal;"> end > 0 </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;"> 9</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         (swap the root(maximum value) of the heap with the last element of the heap)<br></span><span style="color: #008080; font-weight: normal;">10</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         swap(a[end], a[0])<br></span><span style="color: #008080; font-weight: normal;">11</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         (put the heap back </span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;"> max-heap order)<br></span><span style="color: #008080; font-weight: normal;">12</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         siftDown(a, 0, end-1)<br></span><span style="color: #008080; font-weight: normal;">13</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         (decrease the size of the heap by one so that the previous max value will<br></span><span style="color: #008080; font-weight: normal;">14</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         stay </span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;"> its proper placement)<br></span><span style="color: #008080; font-weight: normal;">15</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         end := end - 1<br></span><span style="color: #008080; font-weight: normal;">16</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;"> <br></span><span style="color: #008080; font-weight: normal;">17</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;"> function heapify(a, count) </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;"> </span><span style="color: #000000; font-weight: normal;">     (start </span><span style="color: #0000ff; font-weight: normal;">is</span><span style="color: #000000; font-weight: normal;"> assigned the index </span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;"> a of the last parent node)<br></span><span style="color: #008080; font-weight: normal;">19</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     start := count / 2 - 1<br></span><span style="color: #008080; font-weight: normal;">20</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     <br></span><span style="color: #008080; font-weight: normal;">21</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     </span><span style="color: #0000ff; font-weight: normal;">while</span><span style="color: #000000; font-weight: normal;"> start ≥ 0 </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;"> </span><span style="color: #000000; font-weight: normal;">         (sift down the node at index start to the proper place such that all nodes below<br></span><span style="color: #008080; font-weight: normal;">23</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">          the start index are </span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;"> heap order)<br></span><span style="color: #008080; font-weight: normal;">24</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         siftDown(a, start, count-1)<br></span><span style="color: #008080; font-weight: normal;">25</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         start := start - 1<br></span><span style="color: #008080; font-weight: normal;">26</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     (after sifting down the root all nodes/elements are </span><span style="color: #0000ff; font-weight: normal;">in</span><span style="color: #000000; font-weight: normal;"> heap order)<br></span><span style="color: #008080; font-weight: normal;">27</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;"> <br></span><span style="color: #008080; font-weight: normal;">28</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;"> function siftDown(a, start, end) </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;"> </span><span style="color: #000000; font-weight: normal;">     input:  end represents the limit of how far down the heap<br></span><span style="color: #008080; font-weight: normal;">30</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">                   to sift.<br></span><span style="color: #008080; font-weight: normal;">31</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     root := start<br></span><span style="color: #008080; font-weight: normal;">32</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;"><br></span><span style="color: #008080; font-weight: normal;">33</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">     </span><span style="color: #0000ff; font-weight: normal;">while</span><span style="color: #000000; font-weight: normal;"> root * 2 + 1 ≤ end </span><span style="color: #0000ff; font-weight: normal;">do</span><span style="color: #000000; font-weight: normal;">          (While the root has at least one child)<br></span><span style="color: #008080; font-weight: normal;">34</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         child := root * 2 + 1        (root*2 + 1 points to the left child)<br></span><span style="color: #008080; font-weight: normal;">35</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         swap := root        (keeps track of child to swap with)<br></span><span style="color: #008080; font-weight: normal;">36</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         (check </span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;"> root </span><span style="color: #0000ff; font-weight: normal;">is</span><span style="color: #000000; font-weight: normal;"> smaller than left child)<br></span><span style="color: #008080; font-weight: normal;">37</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         </span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;"> a[swap] < a[child]<br></span><span style="color: #008080; font-weight: normal;">38</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">             swap := child<br></span><span style="color: #008080; font-weight: normal;">39</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         (check </span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;"> right child exists, and </span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;"> it's bigger than what we're currently swapping with)<br></span><span style="color: #008080; font-weight: normal;">40</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         </span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;"> child < end and a[swap] < a[child+1]<br></span><span style="color: #008080; font-weight: normal;">41</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">             swap := child + 1<br></span><span style="color: #008080; font-weight: normal;">42</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         (check </span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;"> we need to swap at all)<br></span><span style="color: #008080; font-weight: normal;">43</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         </span><span style="color: #0000ff; font-weight: normal;">if</span><span style="color: #000000; font-weight: normal;"> swap != root<br></span><span style="color: #008080; font-weight: normal;">44</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">             swap(a[root], a[swap])<br></span><span style="color: #008080; font-weight: normal;">45</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">             root := swap          (repeat to </span><span style="color: #0000ff; font-weight: normal;">continue</span><span style="color: #000000; font-weight: normal;"> sifting down the child now)<br></span><span style="color: #008080; font-weight: normal;">46</span><span style="font-weight: normal;"> </span><span style="color: #000000; font-weight: normal;">         </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;"> </span><span style="color: #000000; font-weight: normal;">             </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;"> </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;"> 1</span> <span style="color: #008000;">//</span><span style="color: #008000;"> build one maximum heap</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 2</span> <span style="color: #008000;"></span><span style="color: #000000;">template </span><span style="color: #000000;"><</span><span style="color: #000000;">typename T</span><span style="color: #000000;">></span><span style="color: #000000;"><br></span><span style="color: #008080;"> 3</span> <span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;"> heapsort(std::vector</span><span style="color: #000000;"><</span><span style="color: #000000;">T</span><span style="color: #000000;">>&</span><span style="color: #000000;"> a)<br></span><span style="color: #008080;"> 4</span> <span style="color: #000000;">{<br></span><span style="color: #008080;"> 5</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> sz </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;">)a.size();<br></span><span style="color: #008080;"> 6</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> sz</span><span style="color: #000000;">/</span><span style="color: #000000;">2</span><span style="color: #000000;">; i </span><span style="color: #000000;">>=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">; i</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br></span><span style="color: #008080;"> 7</span> <span style="color: #000000;">        percDown(a, i, sz);<br></span><span style="color: #008080;"> 8</span> <span style="color: #000000;">    std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">build heap is done.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br></span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> j </span><span style="color: #000000;">=</span><span style="color: #000000;"> sz</span><span style="color: #000000;">-</span><span style="color: #000000;">1</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;">; j</span><span style="color: #000000;">--</span><span style="color: #000000;">) {<br></span><span style="color: #008080;">10</span> <span style="color: #000000;">        std::swap(a[</span><span style="color: #000000;">0</span><span style="color: #000000;">], a[j]);<br></span><span style="color: #008080;">11</span> <span style="color: #000000;">        percDown(a, </span><span style="color: #000000;">0</span><span style="color: #000000;">, j);<br></span><span style="color: #008080;">12</span> <span style="color: #000000;">    }<br></span><span style="color: #008080;">13</span> <span style="color: #000000;">}<br></span><span style="color: #008080;">14</span> <span style="color: #000000;"><br></span><span style="color: #008080;">15</span> <span style="color: #000000;">inline </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> leftChild(</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i)<br></span><span style="color: #008080;">16</span> <span style="color: #000000;">{<br></span><span style="color: #008080;">17</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </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> <span style="color: #000000;">}<br></span><span style="color: #008080;">19</span> <span style="color: #000000;"><br></span><span style="color: #008080;">20</span> <span style="color: #000000;">template </span><span style="color: #000000;"><</span><span style="color: #000000;">typename T</span><span style="color: #000000;">></span><span style="color: #000000;"><br></span><span style="color: #008080;">21</span> <span style="color: #000000;"></span><span style="color: #0000ff;">void</span><span style="color: #000000;"> percDown(std::vector</span><span style="color: #000000;"><</span><span style="color: #000000;">T</span><span style="color: #000000;">>&</span><span style="color: #000000;"> a, </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i, </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> n)<br></span><span style="color: #008080;">22</span> <span style="color: #000000;">{<br></span><span style="color: #008080;">23</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> child;<br></span><span style="color: #008080;">24</span> <span style="color: #000000;">    T tmp;<br></span><span style="color: #008080;">25</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (tmp </span><span style="color: #000000;">=</span><span style="color: #000000;"> a[i]; leftChild(i) </span><span style="color: #000000;"><</span><span style="color: #000000;"> n; i </span><span style="color: #000000;">=</span><span style="color: #000000;"> child) {<br></span><span style="color: #008080;">26</span> <span style="color: #000000;">        child </span><span style="color: #000000;">=</span><span style="color: #000000;"> leftChild(i);<br></span><span style="color: #008080;">27</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (child </span><span style="color: #000000;">!=</span><span style="color: #000000;"> n</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;"> a[child] </span><span style="color: #000000;"><</span><span style="color: #000000;"> 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> <span style="color: #000000;">            child</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">29</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (tmp </span><span style="color: #000000;"><</span><span style="color: #000000;"> a[child])<br></span><span style="color: #008080;">30</span> <span style="color: #000000;">            a[i] </span><span style="color: #000000;">=</span><span style="color: #000000;"> a[child];<br></span><span style="color: #008080;">31</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br></span><span style="color: #008080;">32</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br></span><span style="color: #008080;">33</span> <span style="color: #000000;">    }<br></span><span style="color: #008080;">34</span> <span style="color: #000000;">    a[i] </span><span style="color: #000000;">=</span><span style="color: #000000;"> tmp;<br></span><span style="color: #008080;">35</span> <span style="color: #000000;">}<br></span><span style="color: #008080;">36</span> <span style="color: #000000;"></span></div> </span><span style="font-weight: bold;"><br></span> <img src ="http://www.shnenglu.com/zerolee/aggbug/142686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-25 09:32 <a href="http://www.shnenglu.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.shnenglu.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.shnenglu.com/zerolee/archive/2011/03/22/142504.html</guid><wfw:comment>http://www.shnenglu.com/zerolee/comments/142504.html</wfw:comment><comments>http://www.shnenglu.com/zerolee/archive/2011/03/22/142504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zerolee/comments/commentRss/142504.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zerolee/services/trackbacks/142504.html</trackback:ping><description><![CDATA[鍒犻櫎涓庢煇涓瓧絎︾浉閭諱笖鐩稿悓鐨勫瓧絎︼紝濡傦紝abcddef錛屽垹闄ょ浉閭葷殑鐩稿悓瀛楃d鍚庡彉涓猴細 abcdef銆?br>瑕佹眰錛氳緭鍏ュ瓧絎︿覆,杈撳嚭鍒犻櫎鍚庣殑緇撴灉銆?br>鍙傝僑TL綆楁硶錛?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;"> 1</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> deldupchar(</span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> s)<br></span><span style="color: #008080;"> 2</span> <span style="color: #000000;">{<br></span><span style="color: #008080;"> 3</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">char</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;"> 4</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (s && *s!='\0') {<br></span><span style="color: #008080;"> 5</span> <span style="color: #000000;">        i </span><span style="color: #000000;">=</span><span style="color: #000000;"> s; j </span><span style="color: #000000;">=</span><span style="color: #000000;"> s</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br></span><span style="color: #008080;"> 6</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">while</span><span style="color: #000000;"> (</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;">) {<br></span><span style="color: #008080;"> 7</span> <span style="color: #000000;">            </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</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;"> 8</span> <span style="color: #000000;">                </span><span style="color: #000000;">*++</span><span style="color: #000000;">i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;">j;<br></span><span style="color: #008080;"> 9</span> <span style="color: #000000;">            j</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br></span><span style="color: #008080;">10</span> <span style="color: #000000;">        }<br></span><span style="color: #008080;">11</span> <span style="color: #000000;">        </span><span style="color: #000000;">*++</span><span style="color: #000000;">i </span><span style="color: #000000;">=</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;">;<br></span><span style="color: #008080;">12</span> <span style="color: #000000;">    }<br></span><span style="color: #008080;">13</span> <span style="color: #000000;">}<br></span><span style="color: #008080;">14</span> <span style="color: #000000;"></span></div> <br><img src ="http://www.shnenglu.com/zerolee/aggbug/142504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-22 18:40 <a href="http://www.shnenglu.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 partitionhttp://www.shnenglu.com/zerolee/archive/2011/03/17/142073.htmlZero LeeZero LeeThu, 17 Mar 2011 12:20:00 GMThttp://www.shnenglu.com/zerolee/archive/2011/03/17/142073.htmlhttp://www.shnenglu.com/zerolee/comments/142073.htmlhttp://www.shnenglu.com/zerolee/archive/2011/03/17/142073.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/142073.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/142073.html1. partition algorithm
 1  function partition(list, left, right, pivotIndex)
 2      pivotValue := list[pivotIndex]
 3      swap list[pivotIndex] and list[right]  // Move pivot to end
 4      storeIndex := left
 5      for i from left to right-1
 6          if list[i] < pivotValue
 7              swap list[storeIndex] and list[i]
 8              storeIndex := storeIndex + 1
 9      swap list[right] and list[storeIndex]  // Move pivot to its final place
10      return storeIndex

2. selection algorithm
 1 function select(list, left, right, k)
 2      loop
 3          select pivotIndex between left and right
 4          pivotNewIndex := partition(list, left, right, pivotIndex)
 5          if k = pivotNewIndex - left + 1
 6              return list[pivotNewIndex]
 7          else if k < pivotNewIndex left + 1
 8              right := pivotNewIndex-1
 9          else
10              left := pivotNewIndex+1
11              k := k pivotNewIndex    

>> In above last statement, one bug. Should be
   k := k-pivotNewIndex-left+1
   left := pivotNewIndex+1

3. code
 1 int partition(std::vector<int>& a, int l, int r)
 2 {
 3     int i = l, j = l;
 4     int p = a[r];
 5     while (j<r) {
 6         if (a[j] < p) {
 7             std::swap(a[i], a[j]);
 8             i++;
 9         }
10         j++;
11     }
12     std::swap(a[r], a[i]);
13     return i;
14 }
15 
16 void select_kth_smallest(std::vector<int>& a, int l, int r, int k)
17 {
18     while (1) {
19         int cut = partition(a, l, r);
20 #if 0
21         std::copy(a.begin()+l, a.begin()+cut, std::ostream_iterator<int>(std::cout, " "));
22         std::cout << " <=" << a[cut] << "=> ";
23         std::copy(a.begin()+cut+1, a.begin()+r+1, std::ostream_iterator<int>(std::cout, " "));
24         std::cout << "cut("<<cut<<"),k("<<k<<"),l("<<l<<"),r("<<r<<")\n";
25 #endif
26         if (cut-l+1==k)
27             break;
28         else if (k < cut-l+1)
29             r = cut-1;
30         else {
31             k = k-cut-1+l;
32             l = cut+1;
33         }
34     }
35 }
36 



Zero Lee 2011-03-17 20:20 鍙戣〃璇勮
]]>
浠庡熬鍒板ご杈撳嚭鍗曢摼琛ㄧ殑鍊?/title><link>http://www.shnenglu.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.shnenglu.com/zerolee/archive/2011/03/15/141866.html</guid><wfw:comment>http://www.shnenglu.com/zerolee/comments/141866.html</wfw:comment><comments>http://www.shnenglu.com/zerolee/archive/2011/03/15/141866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zerolee/comments/commentRss/141866.html</wfw:commentRss><trackback:ping>http://www.shnenglu.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> <span style="color: #0000ff;">struct</span><span style="color: #000000;"> ListNode {<br></span><span style="color: #008080;">2</span> <span style="color: #000000;">   </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> m_nKey;<br></span><span style="color: #008080;">3</span> <span style="color: #000000;">   ListNode</span><span style="color: #000000;">*</span><span style="color: #000000;"> m_pNext;<br></span><span style="color: #008080;">4</span> <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> <span style="color: #0000ff;">void</span><span style="color: #000000;"> printSingleListReversely(ListNode</span><span style="color: #000000;">*</span><span style="color: #000000;"> phead) <br></span><span style="color: #008080;">2</span> <span style="color: #000000;">{<br></span><span style="color: #008080;">3</span> <span style="color: #000000;">   </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #000000;">*</span><span style="color: #000000;">phead</span><span style="color: #000000;">!=</span><span style="color: #000000;">NULL) {<br></span><span style="color: #008080;">4</span> <span style="color: #000000;">       printStringListReversely(phead</span><span style="color: #000000;">-></span><span style="color: #000000;">m_pNext);<br></span><span style="color: #008080;">5</span> <span style="color: #000000;">       print(</span><span style="color: #000000;">"</span><span style="color: #000000;">%d </span><span style="color: #000000;">"</span><span style="color: #000000;">, phead</span><span style="color: #000000;">-></span><span style="color: #000000;">m_nKey);<br></span><span style="color: #008080;">6</span> <span style="color: #000000;">   }<br></span><span style="color: #008080;">7</span> <span style="color: #000000;">}</span></div> <br>寤朵幾錛?) 浠庡熬鍒板ご杈撳嚭瀛楃涓? 2錛夊畾涔変釜鍑芥暟姹傚瓧絎︿覆鐨勯暱搴︼紝鍑芥暟鍐呬笉鑳藉0鏄庝換浣曞彉閲忋?br><br><img src ="http://www.shnenglu.com/zerolee/aggbug/141866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-15 13:51 <a href="http://www.shnenglu.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.shnenglu.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.shnenglu.com/zerolee/archive/2011/03/11/141588.html</guid><wfw:comment>http://www.shnenglu.com/zerolee/comments/141588.html</wfw:comment><comments>http://www.shnenglu.com/zerolee/archive/2011/03/11/141588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zerolee/comments/commentRss/141588.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zerolee/services/trackbacks/141588.html</trackback:ping><description><![CDATA[涓涓枃浠朵腑鏈?0浜夸釜鏁存暟錛屾瘡涓暣鏁頒負鍥涗釜瀛楄妭錛屽唴瀛樹負1GB錛屽啓鍑轟竴涓畻娉曪細姹傚嚭榪欎釜鏂囦歡閲岀殑鏁存暟閲屼笉鍖呭惈鐨勪竴涓暣鏁?br>涓嬮潰鐨勪唬鐮佺墖孌典粎浠呮槸涓涓牱渚嬨?br>4涓瓧鑺傜殑鏁存暟鏈澶у彲琛ㄧず涓?^32=4294967296, 涓涓暟涓涓暟鐨勮鍏ュ唴瀛橈紝寤虹珛涓涓猙it map錛屽叡闇瑕?294967296涓猙its(涔熷氨鏄?.5G瀛楄妭鐨勫唴瀛橈紝騫舵病鏈夎秴榪?G鍐呭瓨鐨勯檺鍒?錛岃鍏ユ瘡涓涓暟錛岀疆鐩稿簲鐨刡it涓?銆?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> <span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> N </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">20</span><span style="color: #000000;">; </span><span style="color: #008000;">//</span><span style="color: #008000;"> # of number</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 2</span> <span style="color: #008000;"></span><span style="color: #000000;">    </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> M </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">1000</span><span style="color: #000000;">;   </span><span style="color: #008000;">//</span><span style="color: #008000;"> number range</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 3</span> <span style="color: #008000;"></span><span style="color: #000000;">    std::vector</span><span style="color: #000000;"><</span><span style="color: #0000ff;">int</span><span style="color: #000000;">></span><span style="color: #000000;"> a(N);  // can be imported from external file number by number<br></span><span style="color: #008080;"> 4</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;"><</span><span style="color: #000000;"> N; i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br></span><span style="color: #008080;"> 5</span> <span style="color: #000000;">        a[i] </span><span style="color: #000000;">=</span><span style="color: #000000;"> (</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;"> 6</span> <span style="color: #000000;">    std::copy(a.begin(), a.end(), std::ostream_iterator</span><span style="color: #000000;"><</span><span style="color: #0000ff;">int</span><span style="color: #000000;">></span><span style="color: #000000;">(std::cout, </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;"> 7</span> <span style="color: #000000;">    std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </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;"> 8</span>     <span style="color: #000000;">// bit map setup for existence of each number<br></span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    unsigned </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> nbytes </span><span style="color: #000000;">=</span><span style="color: #000000;"> M</span><span style="color: #000000;">%</span><span style="color: #000000;">8</span><span style="color: #000000;"> </span><span style="color: #000000;">?</span><span style="color: #000000;"> (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;">) : (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> <span style="color: #000000;">    std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </span><span style="color: #000000;">"</span><span style="color: #000000;">nbytes = </span><span style="color: #000000;">"</span><span style="color: #000000;"> </span><span style="color: #000000;"><<</span><span style="color: #000000;"> nbytes </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </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> <span style="color: #000000;"><br></span><span style="color: #008080;">12</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> p </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> </span><span style="color: #0000ff;">char</span><span style="color: #000000;"> [nbytes];<br></span><span style="color: #008080;">13</span> <span style="color: #000000;">    memset(p, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </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> <span style="color: #000000;"><br></span><span style="color: #008080;">15</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;"><</span><span style="color: #000000;"> N; i</span><span style="color: #000000;">++</span><span style="color: #000000;">) {<br></span><span style="color: #008080;">16</span> <span style="color: #000000;">        unsigned </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> index </span><span style="color: #000000;">=</span><span style="color: #000000;"> 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> <span style="color: #000000;">        unsigned </span><span style="color: #0000ff;">int</span><span style="color: #000000;"> bitpos </span><span style="color: #000000;">=</span><span style="color: #000000;"> 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> <span style="color: #000000;">        </span><span style="color: #0000ff;">char</span><span style="color: #000000;">*</span><span style="color: #000000;"> tmp </span><span style="color: #000000;">=</span><span style="color: #000000;"> p</span><span style="color: #000000;">+</span><span style="color: #000000;">index;<br></span><span style="color: #008080;">19</span> <span style="color: #000000;">        </span><span style="color: #000000;">*</span><span style="color: #000000;">tmp </span><span style="color: #000000;">|=</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;"> bitpos;<br></span><span style="color: #008080;">20</span> <span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;">std::cout << "bit pos set to 1 : " << 8*index+bitpos << "\n";</span><span style="color: #008000;"><br></span><span style="color: #008080;">21</span> <span style="color: #008000;"></span><span style="color: #000000;">    }<br></span><span style="color: #008080;">22</span> <span style="color: #000000;">    </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (</span><span style="color: #0000ff;">int</span><span style="color: #000000;"> i </span><span style="color: #000000;">=</span><span style="color: #000000;"> nbytes</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">; i </span><span style="color: #000000;">>=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">; i</span><span style="color: #000000;">--</span><span style="color: #000000;">) {<br></span><span style="color: #008080;">23</span> <span style="color: #000000;">        printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%02X </span><span style="color: #000000;">"</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;">(p</span><span style="color: #000000;">+</span><span style="color: #000000;">i)</span><span style="color: #000000;">&</span><span style="color: #000000;">0xFF</span><span style="color: #000000;">);<br></span><span style="color: #008080;">24</span> <span style="color: #000000;">    }<br></span><span style="color: #008080;">25</span> <span style="color: #000000;">    std::cout </span><span style="color: #000000;"><<</span><span style="color: #000000;"> </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> <span style="color: #000000;">    delete [] p;<br></span><span style="color: #008080;">27</span> <span style="color: #000000;"></span></div> <br> <img src ="http://www.shnenglu.com/zerolee/aggbug/141588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-11 19:20 <a href="http://www.shnenglu.com/zerolee/archive/2011/03/11/141588.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>闈瀙rintf褰㈠紡鐨勫崄鍏繘鍒跺拰浜岃繘鍒舵墦鍗幫紙闆呰檸闈㈣瘯棰橈級http://www.shnenglu.com/zerolee/archive/2011/03/11/141586.htmlZero LeeZero LeeFri, 11 Mar 2011 11:14:00 GMThttp://www.shnenglu.com/zerolee/archive/2011/03/11/141586.htmlhttp://www.shnenglu.com/zerolee/comments/141586.htmlhttp://www.shnenglu.com/zerolee/archive/2011/03/11/141586.html#Feedback2http://www.shnenglu.com/zerolee/comments/commentRss/141586.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/141586.html
 1 template <typename T>
 2 void displayHexBin(const T& v)
 3 {
 4     const unsigned char c2h[] = "0123456789ABCDEF";
 5     const unsigned char c2b[] = "01";
 6 
 7     unsigned char* p = (unsigned char*)&v;
 8     char* buf = new char [sizeof(T)*2+1];
 9     char* ptmp = buf;
10     p = p + sizeof(T)-1;
11     for (int i = 0; i < sizeof(T); i++--p) {
12         *buf++ = c2h[*>> 4];
13         *buf++ = c2h[*& 0x0F];
14     }
15     *buf = '\0';
16     printf("hex format displayed as %s\n", ptmp);
17 
18     delete [] ptmp;
19     p = (unsigned char*)&v; p = p + sizeof(T)-1;
20     ptmp = buf = new char [sizeof(T)*8+1];
21     for (int i = 0; i < sizeof(T); i++--p) {
22         for (int j = 0; j < 8; j++)
23             *buf++ = c2b[(*>> (7-j)) & 0x1];
24     }
25     *buf = '\0';
26     printf("bin format displayed as %s\n", ptmp);
27     delete [] ptmp;
28 }
29 




Zero Lee 2011-03-11 19:14 鍙戣〃璇勮
]]>
鐧懼害鐨勯潰璇曢瑙g瓟http://www.shnenglu.com/zerolee/archive/2011/03/11/141584.htmlZero LeeZero LeeFri, 11 Mar 2011 11:10:00 GMThttp://www.shnenglu.com/zerolee/archive/2011/03/11/141584.htmlhttp://www.shnenglu.com/zerolee/comments/141584.htmlhttp://www.shnenglu.com/zerolee/archive/2011/03/11/141584.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/141584.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/141584.html瑕佹眰錛氱┖闂村鏉傚害O(1)錛屾椂闂村鏉傚害涓篛錛坣錛夈?br>
 1 bool func(int n)
 2 {
 3     return (n&1)==0; // n%2 is more expensive
 4 }
 5 
 6 void group_oddeven(std::vector<int>& a, bool (*func)(int))
 7 {
 8     int i = 0, j = a.size()-1;
 9     int buf = 0;
10     while (i < j) {
11         if (!func(a[i]))    // odd, move forward
12         {   i++continue; }
13         if (func(a[j]))     // even, move backward
14         {   j--continue; }
15 
16         std::swap(a[i++], a[j--]);
17     }
18 }
19 



Zero Lee 2011-03-11 19:10 鍙戣〃璇勮
]]>
璁捐鍖呭惈min鍑芥暟鐨勬爤http://www.shnenglu.com/zerolee/archive/2010/11/26/134718.htmlZero LeeZero LeeFri, 26 Nov 2010 04:13:00 GMThttp://www.shnenglu.com/zerolee/archive/2010/11/26/134718.html瑕佹眰鍑芥暟min, push, pop鐨勬椂闂村鏉傚害閮芥槸O(1)
 1 class stackmin {
 2     int data[N];
 3     int minidx[N];
 4     int top;
 5 public:
 6     stackmin()
 7         : top(-1)
 8     {
 9         ::memset(minidx, -1sizeof(int)*N);
10         ::memset(data, 0sizeof(int)*N);
11     }
12 
13     bool push(int d)
14     {
15         if (top < N-1)
16             data[++top] = d;
17         else
18             return false;
19         if (top==0)
20             minidx[top] = 0;
21         else if (data[minidx[top-1]] > d)
22             minidx[top] = top;
23         else
24             minidx[top] = minidx[top-1];
25         return true;
26     }
27     bool pop(int& d)
28     {
29         if (top<0)
30             return false;
31         else
32 
33             d = data[top];
34         minidx[top] = -1;
35         top--;
36         return true;
37     }
38     bool min(int& m)
39     {
40         if (top>=0)
41             m = data[minidx[top]];
42         else
43             return false;
44         return true;
45     }
46     void print()
47     {
48         for (int i = 0; i <= top; i++)
49             std::cout << data[i] << " ";
50         std::cout << "\n";
51     }
52 };
53 

鍊熷姪鍙︿竴涓唴閮ㄧ殑鏁扮粍錛岀敤鏉ュ瓨鍌ㄦ瘡嬈ush鍏冪礌涔嬪悗鐨勬爤鏈灝忓肩殑绱㈠紩錛屼究鍙緢鏂逛究鐨勫湪O(1)鐨勬椂闂村唴瀹屾垚浠ヤ笂涓夌鎿嶄綔銆備竴縐嶇┖闂存崲鏃墮棿鐨勬柟娉曘?br>



Zero Lee 2010-11-26 12:13 鍙戣〃璇勮
]]>
Calcuate power n of x recursivelyhttp://www.shnenglu.com/zerolee/archive/2010/10/18/130297.htmlZero LeeZero LeeMon, 18 Oct 2010 09:19:00 GMThttp://www.shnenglu.com/zerolee/archive/2010/10/18/130297.htmlhttp://www.shnenglu.com/zerolee/comments/130297.htmlhttp://www.shnenglu.com/zerolee/archive/2010/10/18/130297.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/130297.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/130297.htmlGiven x and n, calculate its power n:
 1 int power(int x, int n)
 2 {
 3    if (n==0
 4      return 1;
 5    else (n%2==0
 6      return power(x*x, n/2);
 7    else 
 8      return x*power(x*x, n/2);
 9 }
10   
11




Zero Lee 2010-10-18 17:19 鍙戣〃璇勮
]]>
Convert one binary search tree to double-linked listhttp://www.shnenglu.com/zerolee/archive/2010/10/18/130252.htmlZero LeeZero LeeMon, 18 Oct 2010 04:30:00 GMThttp://www.shnenglu.com/zerolee/archive/2010/10/18/130252.htmlhttp://www.shnenglu.com/zerolee/comments/130252.htmlhttp://www.shnenglu.com/zerolee/archive/2010/10/18/130252.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/130252.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/130252.htmlCpp code demo as below:
 1 struct BSTreeNode
 2 {
 3     int m_value;
 4     BSTreeNode* m_pLeft;
 5     BSTreeNode* m_pRight;
 6 };
 7 
 8 BSTreeNode* convert(BSTreeNode* phead, bool asRight)
 9 {
10     if (!phead)
11         return NULL;
12     BSTreeNode* pLeft = 0*pRight=0;
13     if (phead->m_pLeft)
14         pLeft = convert(phead->m_pLeft, false);
15     if (pLeft) {
16         pLeft->m_pRight = phead;
17         phead->m_pLeft = pLeft;
18     }
19     if (phead->m_pRight)
20         pRight = convert(phead->m_pRight, true);
21     if (pRight) {
22         pRight->m_pLeft = phead;
23         phead->m_pRight = pRight;
24     }
25     BSTreeNode* ptmp = phead;
26     if (asRight) {
27         while (ptmp->m_pLeft) {
28             ptmp = ptmp->m_pLeft;
29         }
30     } else {
31         while (ptmp->m_pRight) {
32             ptmp = ptmp->m_pRight;
33         }
34     }
35     return ptmp;
36 }
37 
38 BSTreeNode* convert2doublelist(BSTreeNode* phead)
39 {
40     return convert(phead, true);
41 }
42 




Zero Lee 2010-10-18 12:30 鍙戣〃璇勮
]]>
Calculate maximum sum of any subarray sethttp://www.shnenglu.com/zerolee/archive/2010/10/18/130251.htmlZero LeeZero LeeMon, 18 Oct 2010 04:27:00 GMThttp://www.shnenglu.com/zerolee/archive/2010/10/18/130251.htmlhttp://www.shnenglu.com/zerolee/comments/130251.htmlhttp://www.shnenglu.com/zerolee/archive/2010/10/18/130251.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/130251.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/130251.htmlCpp code demo as below:
 1 int maxSubarraySum(int arr[], int length, int& beg, int& end)
 2 {
 3     assert(arr!=0);
 4     int maxSum = 0;
 5     int tmpSum = 0;
 6     beg = 0; end = 0;
 7     for (int i = 0; i < length; i++) {
 8         tmpSum += arr[i];
 9         if (tmpSum < 0) {   // discard it
10             tmpSum = 0;
11             beg = end = i+1;
12         }
13         if (tmpSum > maxSum) {
14             maxSum = tmpSum;
15             end = i+1;
16         }
17     }
18     if (maxSum ==0 ) {      // if all numbers are negative, return max value
19         maxSum = arr[0];
20         for (int i = 1; i < length; i++)
21             if (maxSum < arr[i]) {
22                 maxSum = arr[i];
23                 beg = i; end = i+1;
24             }
25     }
26     return maxSum;
27 }
28 




Zero Lee 2010-10-18 12:27 鍙戣〃璇勮
]]>
One SRC demo to reverse one single-linked listhttp://www.shnenglu.com/zerolee/archive/2010/10/18/130248.htmlZero LeeZero LeeMon, 18 Oct 2010 04:23:00 GMThttp://www.shnenglu.com/zerolee/archive/2010/10/18/130248.htmlhttp://www.shnenglu.com/zerolee/comments/130248.htmlhttp://www.shnenglu.com/zerolee/archive/2010/10/18/130248.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/130248.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/130248.html
 1 struct listNode {
 2    int value;
 3    listNode* next;
 4 };
 5 
 6 listNode* reverseList(listNode* phead)
 7 {
 8     listNode* pcur = phead;
 9     listNode* pprev = 0*pnext = 0;
10     while (pcur) {
11       pnext = pcur->next;
12       pcur->next = pprev;
13 
14       pprev = pcur;
15       pcur = pnext;
16    }
17    return pcur;
18 }




Zero Lee 2010-10-18 12:23 鍙戣〃璇勮
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            99天天综合性| 一区二区三区免费网站| 久久久综合精品| 免费观看久久久4p| 在线观看日韩专区| 免费久久精品视频| 亚洲精品在线电影| 性做久久久久久久免费看| 国产欧美日韩精品专区| 久久久久久久综合色一本| 欧美激情按摩在线| 中文国产成人精品久久一| 国产精品美女久久久久久久| 亚洲欧美制服另类日韩| 久久综合成人精品亚洲另类欧美| 亚洲国产一区在线| 欧美日韩在线免费视频| 欧美一区三区二区在线观看| 欧美成人a∨高清免费观看| 一本色道久久综合狠狠躁的推荐| 欧美午夜精品久久久久久久| 欧美一级理论片| 亚洲国产精品精华液2区45| 一区二区免费在线播放| 国产亚洲精品高潮| 欧美精品偷拍| 欧美一区三区二区在线观看| 亚洲成人在线网| 久久久之久亚州精品露出| 亚洲韩日在线| 久久xxxx| av成人免费| 在线观看日韩专区| 国产精品爽黄69| 欧美激情视频一区二区三区在线播放| 午夜精品国产| 亚洲美女区一区| 麻豆国产精品va在线观看不卡| 亚洲一区二三| 亚洲国产第一| 国产欧美日韩不卡| 欧美视频一区二区三区在线观看| 久久久久久久91| 亚洲欧美久久久| 99re6这里只有精品| 免费欧美在线视频| 欧美中文字幕| 亚洲影音先锋| 一本色道久久99精品综合| 在线免费观看日本欧美| 国产美女诱惑一区二区| 欧美日韩在线观看一区二区| 久久色在线播放| 久久不射网站| 亚洲欧洲av一区二区| 一本色道久久精品| 亚洲精品日韩久久| 欧美激情四色 | 久久精品五月婷婷| 亚洲一区二区三区视频| 99www免费人成精品| 亚洲第一视频| 在线观看国产精品淫| 国产视频观看一区| 国产性猛交xxxx免费看久久| 国产精品久久久久秋霞鲁丝| 欧美特黄一区| 欧美日韩综合在线| 欧美日韩一区二区三区在线看| 欧美极品一区二区三区| 欧美国产免费| 欧美破处大片在线视频| 欧美日韩国产不卡| 欧美日韩高清在线播放| 欧美人与禽猛交乱配| 欧美精品一区二区三区高清aⅴ| 欧美激情免费在线| 欧美精品一区在线| 欧美视频观看一区| 国产精品久久久久久久久免费樱桃 | 欧美日韩网站| 欧美天堂亚洲电影院在线观看| 欧美日韩国产色视频| 欧美日韩免费| 国产精品卡一卡二| 国产欧美一区二区精品性色| 国产日韩欧美一区二区| 国产在线视频不卡二| 在线播放国产一区中文字幕剧情欧美| 一区二区在线视频| 最新成人在线| 亚洲视频1区2区| 亚洲欧美在线观看| 久久精品在线视频| 欧美激情aⅴ一区二区三区| 91久久极品少妇xxxxⅹ软件| 妖精成人www高清在线观看| 亚洲图中文字幕| 久久gogo国模啪啪人体图| 久久久久久久999精品视频| 欧美高清视频| 国产精品日韩电影| 精品成人一区| 在线亚洲伦理| 久久久国产午夜精品| 欧美国产91| 亚洲一区二区三区精品动漫| 久久国产福利国产秒拍| 欧美二区在线播放| 国产精品美女www爽爽爽| 尤物九九久久国产精品的分类| 亚洲精品视频一区| 欧美一区在线直播| 男同欧美伦乱| 亚洲午夜国产一区99re久久| 久久视频一区二区| 国产精品国产三级欧美二区| 在线观看欧美| 午夜精品免费| 亚洲国产精品悠悠久久琪琪| 亚洲专区免费| 欧美另类videos死尸| 国产午夜亚洲精品不卡| 99精品国产在热久久婷婷| 欧美伊人久久久久久久久影院 | 亚洲高清资源| 欧美亚洲一区二区在线观看| 欧美精品亚洲精品| 在线成人激情| 欧美一乱一性一交一视频| 亚洲精品国产精品国自产观看| 欧美在线观看视频在线| 欧美亚州韩日在线看免费版国语版| 精品999久久久| 欧美一区二区三区视频免费播放| 亚洲片在线观看| 久久久久久黄| 国产一区二区三区在线观看精品| 一区二区三区欧美视频| 欧美1区免费| 小黄鸭精品密入口导航| 国产精品久久久久久久浪潮网站| 亚洲乱码一区二区| 免费在线成人av| 欧美在线精品免播放器视频| 国产精品久久久久av免费| 99国产精品视频免费观看一公开 | 欧美激情第二页| 性视频1819p久久| 国产精品国产馆在线真实露脸| 亚洲精品一区二区三区蜜桃久 | 亚洲精选在线观看| 米奇777超碰欧美日韩亚洲| 亚洲欧美日韩一区二区| 国产精品激情电影| 亚洲自拍偷拍色片视频| 亚洲精品在线电影| 欧美日韩视频在线一区二区 | 欧美国产成人在线| 亚洲黄色视屏| 欧美超级免费视 在线| 久久久久久自在自线| 国产在线欧美日韩| 久久久久久久久久久一区| 午夜日本精品| 国产一区二区日韩精品欧美精品 | 一本色道久久| 欧美私人网站| 午夜在线一区| 午夜亚洲性色视频| 国产性天天综合网| 久久午夜激情| 久久中文欧美| 日韩视频精品在线观看| 亚洲日本欧美天堂| 欧美视频第二页| 性欧美办公室18xxxxhd| 亚洲欧美一区二区激情| 国内视频一区| 欧美fxxxxxx另类| 欧美高清一区| 亚洲一级电影| 篠田优中文在线播放第一区| 韩国三级电影一区二区| 欧美.www| 欧美日韩国产色视频| 午夜精品在线| 久久久久久久一区二区| 亚洲伦伦在线| 亚洲一区二区三区在线| 黄色成人在线网址| 亚洲欧洲一区二区三区| 国产精品理论片在线观看| 久久免费国产| 欧美精品乱人伦久久久久久| 亚洲欧美在线一区二区| 久久久欧美一区二区| 一区二区三区四区在线| 午夜在线一区| 日韩亚洲欧美成人一区|