﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-高性能服务器开发-随笔分类-算法</title><link>http://www.cppblog.com/TheLast/category/13335.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 20 Aug 2011 18:35:28 GMT</lastBuildDate><pubDate>Sat, 20 Aug 2011 18:35:28 GMT</pubDate><ttl>60</ttl><item><title>基础排序查找算法</title><link>http://www.cppblog.com/TheLast/archive/2011/08/19/153878.html</link><dc:creator>兵临城下</dc:creator><author>兵临城下</author><pubDate>Fri, 19 Aug 2011 10:28:00 GMT</pubDate><guid>http://www.cppblog.com/TheLast/archive/2011/08/19/153878.html</guid><wfw:comment>http://www.cppblog.com/TheLast/comments/153878.html</wfw:comment><comments>http://www.cppblog.com/TheLast/archive/2011/08/19/153878.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/TheLast/comments/commentRss/153878.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/TheLast/services/trackbacks/153878.html</trackback:ping><description><![CDATA[二分查找：<br />&nbsp;binarysearch考的比较多，它适用于已经排序的元素中的查找<br /><br />&nbsp;<span class="Apple-style-span" style="font-size: 13px; "><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;binarySearch(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;a[],</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;len,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;value)</span></span><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; 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; width: 997px; word-break: break-all; ">{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;low&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;high&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;len&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(low</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">high) &nbsp; //注意搜索条件，有可能两者会相等<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;mid&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;(low</span><span style="color: #000000; ">+</span><span style="color: #000000; ">high)</span><span style="color: #000000; ">/</span><span style="color: #000000; ">2</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(a[mid]</span><span style="color: #000000; ">==</span><span style="color: #000000; ">value)&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;mid;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(a[mid]</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">value)&nbsp;high&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mid&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; ">&nbsp;low&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;mid&nbsp;</span><span style="color: #000000; ">+</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br />}<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;a[]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">,</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">4</span><span style="color: #000000; ">,</span><span style="color: #000000; ">5</span><span style="color: #000000; ">,</span><span style="color: #000000; ">6</span><span style="color: #000000; ">,</span><span style="color: #000000; ">7</span><span style="color: #000000; ">,</span><span style="color: #000000; ">8</span><span style="color: #000000; ">,</span><span style="color: #000000; ">9</span><span style="color: #000000; ">,</span><span style="color: #000000; ">10</span><span style="color: #000000; ">};<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;rec&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;binarySearch(a,</span><span style="color: #000000; ">10</span><span style="color: #000000; ">,</span><span style="color: #000000; ">4</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(rec</span><span style="color: #000000; ">==-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Not&nbsp;found\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">else</span><span style="color: #000000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">value&nbsp;is&nbsp;found&nbsp;%d&nbsp;\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,rec);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div>&nbsp;<br />&nbsp;快速排序<br />&nbsp;对冒泡算法的扩展<br />&nbsp;<br />&nbsp;&nbsp;<span class="Apple-style-span" style="font-size: 13px; "><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;partition(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;a[],</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;low,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;high)</span></span><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; 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; width: 997px; word-break: break-all; ">{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;temp&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a[low];<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(low</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">high)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #000000; ">&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(low</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">high&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;a[high]</span><span style="color: #000000; ">&gt;=</span><span style="color: #000000; ">temp)&nbsp;</span><span style="color: #000000; ">--</span><span style="color: #000000; ">high;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[low]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a[high];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">while</span><span style="color: #000000; ">(low</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">high&nbsp;</span><span style="color: #000000; ">&amp;&amp;</span><span style="color: #000000; ">&nbsp;a[low]</span><span style="color: #000000; ">&lt;=</span><span style="color: #000000; ">temp)&nbsp;&nbsp;</span><span style="color: #000000; ">++</span><span style="color: #000000; ">low;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a[high]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a[low];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;a[low]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;low;<br />}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br /></span><span style="color: #0000ff; ">void</span><span style="color: #000000; ">&nbsp;Qsort(</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;a[],</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;begin,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;end)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;rec;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">if</span><span style="color: #000000; ">(begin</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">end)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rec&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;partition(a,begin,end);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">rec&nbsp;is&nbsp;%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,rec);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Qsort(a,begin,rec</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Qsort(a,rec</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,end);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;main()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;&nbsp;a[]&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;{</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">4</span><span style="color: #000000; ">,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">-</span><span style="color: #000000; ">3</span><span style="color: #000000; ">,</span><span style="color: #000000; ">90</span><span style="color: #000000; ">,</span><span style="color: #000000; ">7</span><span style="color: #000000; ">,</span><span style="color: #000000; ">9</span><span style="color: #000000; ">,</span><span style="color: #000000; ">23</span><span style="color: #000000; ">};<br />&nbsp;&nbsp;&nbsp;&nbsp;Qsort(a,</span><span style="color: #000000; ">0</span><span style="color: #000000; ">,</span><span style="color: #000000; ">7</span><span style="color: #000000; ">);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">&nbsp;i&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">for</span><span style="color: #000000; ">(;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">8</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">%d\t</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,a[i]);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; ">return</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div>&nbsp;<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;<img src ="http://www.cppblog.com/TheLast/aggbug/153878.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/TheLast/" target="_blank">兵临城下</a> 2011-08-19 18:28 <a href="http://www.cppblog.com/TheLast/archive/2011/08/19/153878.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>