锘??xml version="1.0" encoding="utf-8" standalone="yes"?>青青草原综合久久大伊人精品,久久综合久久性久99毛片,欧美国产成人久久精品http://m.shnenglu.com/zerolee/category/15205.htmlzh-cnSat, 16 Jun 2012 15:17:32 GMTSat, 16 Jun 2012 15:17:32 GMT60濡備綍灝嗕竴鐗囧唴瀛橀摼鎺ユ垚閾捐〃http://m.shnenglu.com/zerolee/archive/2012/06/16/179073.htmlZero LeeZero LeeSat, 16 Jun 2012 10:38:00 GMThttp://m.shnenglu.com/zerolee/archive/2012/06/16/179073.htmlhttp://m.shnenglu.com/zerolee/comments/179073.htmlhttp://m.shnenglu.com/zerolee/archive/2012/06/16/179073.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/179073.htmlhttp://m.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://m.shnenglu.com/zerolee/archive/2011/10/19/158661.htmlZero LeeZero LeeWed, 19 Oct 2011 01:37:00 GMThttp://m.shnenglu.com/zerolee/archive/2011/10/19/158661.htmlhttp://m.shnenglu.com/zerolee/comments/158661.htmlhttp://m.shnenglu.com/zerolee/archive/2011/10/19/158661.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/158661.htmlhttp://m.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://m.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://m.shnenglu.com/zerolee/archive/2011/10/19/158660.html</guid><wfw:comment>http://m.shnenglu.com/zerolee/comments/158660.html</wfw:comment><comments>http://m.shnenglu.com/zerolee/archive/2011/10/19/158660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/zerolee/comments/commentRss/158660.html</wfw:commentRss><trackback:ping>http://m.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://m.shnenglu.com/zerolee/aggbug/158660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-10-19 09:34 <a href="http://m.shnenglu.com/zerolee/archive/2011/10/19/158660.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Generating Permutationshttp://m.shnenglu.com/zerolee/archive/2011/09/21/156428.htmlZero LeeZero LeeWed, 21 Sep 2011 07:22:00 GMThttp://m.shnenglu.com/zerolee/archive/2011/09/21/156428.htmlhttp://m.shnenglu.com/zerolee/comments/156428.htmlhttp://m.shnenglu.com/zerolee/archive/2011/09/21/156428.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/156428.htmlhttp://m.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://m.shnenglu.com/zerolee/archive/2011/09/16/155940.htmlZero LeeZero LeeFri, 16 Sep 2011 06:15:00 GMThttp://m.shnenglu.com/zerolee/archive/2011/09/16/155940.htmlhttp://m.shnenglu.com/zerolee/comments/155940.htmlhttp://m.shnenglu.com/zerolee/archive/2011/09/16/155940.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/155940.htmlhttp://m.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://m.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://m.shnenglu.com/zerolee/archive/2011/03/25/142686.html</guid><wfw:comment>http://m.shnenglu.com/zerolee/comments/142686.html</wfw:comment><comments>http://m.shnenglu.com/zerolee/archive/2011/03/25/142686.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/zerolee/comments/commentRss/142686.html</wfw:commentRss><trackback:ping>http://m.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://m.shnenglu.com/zerolee/aggbug/142686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-25 09:32 <a href="http://m.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://m.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://m.shnenglu.com/zerolee/archive/2011/03/22/142504.html</guid><wfw:comment>http://m.shnenglu.com/zerolee/comments/142504.html</wfw:comment><comments>http://m.shnenglu.com/zerolee/archive/2011/03/22/142504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/zerolee/comments/commentRss/142504.html</wfw:commentRss><trackback:ping>http://m.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://m.shnenglu.com/zerolee/aggbug/142504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-22 18:40 <a href="http://m.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://m.shnenglu.com/zerolee/archive/2011/03/17/142073.htmlZero LeeZero LeeThu, 17 Mar 2011 12:20:00 GMThttp://m.shnenglu.com/zerolee/archive/2011/03/17/142073.htmlhttp://m.shnenglu.com/zerolee/comments/142073.htmlhttp://m.shnenglu.com/zerolee/archive/2011/03/17/142073.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/142073.htmlhttp://m.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://m.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://m.shnenglu.com/zerolee/archive/2011/03/15/141866.html</guid><wfw:comment>http://m.shnenglu.com/zerolee/comments/141866.html</wfw:comment><comments>http://m.shnenglu.com/zerolee/archive/2011/03/15/141866.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/zerolee/comments/commentRss/141866.html</wfw:commentRss><trackback:ping>http://m.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://m.shnenglu.com/zerolee/aggbug/141866.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-15 13:51 <a href="http://m.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://m.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://m.shnenglu.com/zerolee/archive/2011/03/11/141588.html</guid><wfw:comment>http://m.shnenglu.com/zerolee/comments/141588.html</wfw:comment><comments>http://m.shnenglu.com/zerolee/archive/2011/03/11/141588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/zerolee/comments/commentRss/141588.html</wfw:commentRss><trackback:ping>http://m.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://m.shnenglu.com/zerolee/aggbug/141588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/zerolee/" target="_blank">Zero Lee</a> 2011-03-11 19:20 <a href="http://m.shnenglu.com/zerolee/archive/2011/03/11/141588.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>闈瀙rintf褰㈠紡鐨勫崄鍏繘鍒跺拰浜岃繘鍒舵墦鍗幫紙闆呰檸闈㈣瘯棰橈級http://m.shnenglu.com/zerolee/archive/2011/03/11/141586.htmlZero LeeZero LeeFri, 11 Mar 2011 11:14:00 GMThttp://m.shnenglu.com/zerolee/archive/2011/03/11/141586.htmlhttp://m.shnenglu.com/zerolee/comments/141586.htmlhttp://m.shnenglu.com/zerolee/archive/2011/03/11/141586.html#Feedback2http://m.shnenglu.com/zerolee/comments/commentRss/141586.htmlhttp://m.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://m.shnenglu.com/zerolee/archive/2011/03/11/141584.htmlZero LeeZero LeeFri, 11 Mar 2011 11:10:00 GMThttp://m.shnenglu.com/zerolee/archive/2011/03/11/141584.htmlhttp://m.shnenglu.com/zerolee/comments/141584.htmlhttp://m.shnenglu.com/zerolee/archive/2011/03/11/141584.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/141584.htmlhttp://m.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://m.shnenglu.com/zerolee/archive/2010/11/26/134718.htmlZero LeeZero LeeFri, 26 Nov 2010 04:13:00 GMThttp://m.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://m.shnenglu.com/zerolee/archive/2010/10/18/130297.htmlZero LeeZero LeeMon, 18 Oct 2010 09:19:00 GMThttp://m.shnenglu.com/zerolee/archive/2010/10/18/130297.htmlhttp://m.shnenglu.com/zerolee/comments/130297.htmlhttp://m.shnenglu.com/zerolee/archive/2010/10/18/130297.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/130297.htmlhttp://m.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://m.shnenglu.com/zerolee/archive/2010/10/18/130252.htmlZero LeeZero LeeMon, 18 Oct 2010 04:30:00 GMThttp://m.shnenglu.com/zerolee/archive/2010/10/18/130252.htmlhttp://m.shnenglu.com/zerolee/comments/130252.htmlhttp://m.shnenglu.com/zerolee/archive/2010/10/18/130252.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/130252.htmlhttp://m.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://m.shnenglu.com/zerolee/archive/2010/10/18/130251.htmlZero LeeZero LeeMon, 18 Oct 2010 04:27:00 GMThttp://m.shnenglu.com/zerolee/archive/2010/10/18/130251.htmlhttp://m.shnenglu.com/zerolee/comments/130251.htmlhttp://m.shnenglu.com/zerolee/archive/2010/10/18/130251.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/130251.htmlhttp://m.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://m.shnenglu.com/zerolee/archive/2010/10/18/130248.htmlZero LeeZero LeeMon, 18 Oct 2010 04:23:00 GMThttp://m.shnenglu.com/zerolee/archive/2010/10/18/130248.htmlhttp://m.shnenglu.com/zerolee/comments/130248.htmlhttp://m.shnenglu.com/zerolee/archive/2010/10/18/130248.html#Feedback0http://m.shnenglu.com/zerolee/comments/commentRss/130248.htmlhttp://m.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 鍙戣〃璇勮
]]>
久久精品中文无码资源站| 久久久久久久综合狠狠综合| 国产成人久久精品区一区二区| 国产巨作麻豆欧美亚洲综合久久| 亚洲精品99久久久久中文字幕 | 午夜精品久久久久久久| 精品久久久久久99人妻| 久久精品国产亚洲77777| 久久中文字幕人妻丝袜| 一本大道久久东京热无码AV| 韩国无遮挡三级久久| 久久国产高清字幕中文| 久久66热人妻偷产精品9| 成人资源影音先锋久久资源网| 亚洲AV日韩精品久久久久久 | 国产伊人久久| 久久毛片免费看一区二区三区| 亚洲精品NV久久久久久久久久| 久久亚洲中文字幕精品一区| 国产亚洲精久久久久久无码77777| 久久久久se色偷偷亚洲精品av| 亚洲国产精品无码成人片久久| 久久九九亚洲精品| 久久久久国产一区二区三区| 久久久久久精品久久久久| 久久九九有精品国产23百花影院| 亚洲国产精品久久久久婷婷老年| 国内精品伊人久久久影院| 久久午夜电影网| 国产Av激情久久无码天堂| 久久综合伊人77777麻豆| 9191精品国产免费久久| 伊人久久大香线蕉成人| 国产成人香蕉久久久久| 99久久精品国产麻豆| 亚洲第一极品精品无码久久| 久久强奷乱码老熟女| 久久精品国产亚洲Aⅴ蜜臀色欲| 久久精品国产99久久无毒不卡 | 国内精品久久久久久麻豆 | 国产精品亚洲综合专区片高清久久久|