﻿<?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++博客-&lt;font size=6 color="black"&gt;je pense, donc je suis&lt;/font&gt;-随笔分类-Algorithm</title><link>http://www.cppblog.com/zytoftuncun/category/3513.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 21:24:02 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 21:24:02 GMT</pubDate><ttl>60</ttl><item><title>CodeGuru代码阅读(一)</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/07/22/28566.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Sun, 22 Jul 2007 04:27:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/07/22/28566.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/28566.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/07/22/28566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/28566.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/28566.html</trackback:ping><description><![CDATA[<span>&nbsp;&nbsp; 本文简单简介二叉树的概念，并给出平衡一颗二叉树的方法</span>
<p><strong><span style="FONT-SIZE: 18pt; COLOR: #000000; FONT-FAMILY: Lucida Console; BACKGROUND-COLOR: #ffffff"><em style="BACKGROUND-COLOR: #ff9900">关于二叉树<br></em></span></strong><span>&nbsp;&nbsp;&nbsp;&nbsp;现在有</span><span>N</span><span>个元素的数组或者链表，要查找一个元素必须遍历数组直到找到元素。假如元素在是数组中最后一个或者数组中不存在这样的元素，那么很不幸，我们要遍历整个数组。如果</span><span>N</span><span>非常大，那将是非常痛苦的一件事情。<br></span><span>用二叉树情况就好多了：<br></span><span><span>1．&nbsp;</span></span><span>更快的查找<br></span><span><span>2．&nbsp;</span></span><span>增加元素时，元素被自动排列<br></span><strong><span style="FONT-SIZE: 18pt; BACKGROUND-COLOR: #ff9900"><em>原理：</em><br></span></strong><span>在链表或数组中，元素一个接着一个，如图</span></p>
<span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><img height=60 alt="" src="http://www.cppblog.com/images/cppblog_com/zytoftuncun/BinTreellist1.gif" width=300 border=0><br>&nbsp;
<p><span>在二叉树中情况不太一样了</span></p>
<img height=175 alt="" src="http://www.cppblog.com/images/cppblog_com/zytoftuncun/BinTree2.gif" width=335 border=0><br><span>每个元素连着两个元素，左孩子和右孩子。他们存储的值的关系有如下规定<br></span><span>Value</span><span>（</span><span>left</span><span>）</span><span>&lt;Value</span><span>（</span><span>middle</span><span>）</span><span>&lt;=Value</span><span>（</span><span>right</span><span>）<br><br></span><strong><span style="BACKGROUND-COLOR: #ffffff">排序：<br></span></strong><span>在二叉树中利用递归你能很方便的排序<br></span><span>前序遍历</span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">PrintElement(pTopMostElement)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;PrintElement(TreeElement</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pElement)<br><img id=Codehighlighter1_85_226_Open_Image onclick="this.style.display='none'; Codehighlighter1_85_226_Open_Text.style.display='none'; Codehighlighter1_85_226_Closed_Image.style.display='inline'; Codehighlighter1_85_226_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_85_226_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_226_Closed_Text.style.display='none'; Codehighlighter1_85_226_Open_Image.style.display='inline'; Codehighlighter1_85_226_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_85_226_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_85_226_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pElement)<br><img id=Codehighlighter1_109_222_Open_Image onclick="this.style.display='none'; Codehighlighter1_109_222_Open_Text.style.display='none'; Codehighlighter1_109_222_Closed_Image.style.display='inline'; Codehighlighter1_109_222_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_109_222_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_109_222_Closed_Text.style.display='none'; Codehighlighter1_109_222_Open_Image.style.display='inline'; Codehighlighter1_109_222_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_109_222_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_109_222_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintElement(pElement</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">LeftChild)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pElement</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">PrintMe()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintElement(pElement</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">RightChild)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.5pt">后序遍历：</span><span lang=EN-US style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">PrintElementReversed(pTopMostElement)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;PrintElementReversed(TreeElement</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pElement)<br><img id=Codehighlighter1_101_258_Open_Image onclick="this.style.display='none'; Codehighlighter1_101_258_Open_Text.style.display='none'; Codehighlighter1_101_258_Closed_Image.style.display='inline'; Codehighlighter1_101_258_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_101_258_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_101_258_Closed_Text.style.display='none'; Codehighlighter1_101_258_Open_Image.style.display='inline'; Codehighlighter1_101_258_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_101_258_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_101_258_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pElement)<br><img id=Codehighlighter1_125_254_Open_Image onclick="this.style.display='none'; Codehighlighter1_125_254_Open_Text.style.display='none'; Codehighlighter1_125_254_Closed_Image.style.display='inline'; Codehighlighter1_125_254_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_125_254_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_125_254_Closed_Text.style.display='none'; Codehighlighter1_125_254_Open_Image.style.display='inline'; Codehighlighter1_125_254_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_125_254_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_125_254_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintElementReversed(pElement</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">RightChild)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pElement</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">PrintMe()<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PrintElementReversed(pElement</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">LeftChild)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<strong><span style="BACKGROUND-COLOR: #ccffcc"><br><span style="FONT-SIZE: 18pt; BACKGROUND-COLOR: #ff9900"><em>如何使二叉树平衡？</em><br></span></span></strong><strong></strong><span>添加元素的顺序将影响二叉树的形态，以</span><span><span>3,6,4,8,1,9,2,7,5</span></span><span><span>的顺序得到</span></span><br><img height=100 alt="" src="http://www.cppblog.com/images/cppblog_com/zytoftuncun/BinTree3.gif" width=200 border=0><br>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><font face=宋体>以</font>1,2,3,4,5,6,7,8,9</span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-size: 10.5pt">将得到<br></span><span lang=EN-US style="COLOR: black; FONT-FAMILY: Verdana; mso-bidi-font-size: 10.5pt"><o:p><img height=200 alt="" src="http://www.cppblog.com/images/cppblog_com/zytoftuncun/BinTree4.gif" width=200 border=0><br><span>有以下方法可以考虑：<br></span><span><span>1．<span> </span></span></span><span>以非排序的元素插入元素，不能要求给出的元素是高度不排序的<br></span><span><span>2．&nbsp;</span></span><span>以一组随机元素构造二叉树，然后替换这些元素，然后通过旋转得到平衡的树。参考随机树。<br></span><span><span>3．&nbsp;</span></span><span>重构这稞树<br><br></span><strong><span style="FONT-SIZE: 18pt; BACKGROUND-COLOR: #ff9900"><em>重构整稞树<br></em></span></strong><span><span>1．&nbsp;</span></span><span>把元素拷贝到数组中，以升序排序<br></span><span><span>2．&nbsp;</span></span><span>清空这棵树<br></span><span><span>3．&nbsp;</span></span><span>从数组中高度不排序的选取元素插入树中</span><span>可以这样完成第三步：</span></p>
<img height=170 alt="" src="http://www.cppblog.com/images/cppblog_com/zytoftuncun/BinTreemoving2montana6.gif" width=230 border=0><br><span>可以递归的实现：</span>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Assuming&nbsp;array&nbsp;ranges&nbsp;from&nbsp;[0..arraySize-1]</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">GetFromOrderedArray(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,arraySize</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;GetFromOrderedArray(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;lowBound,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;highBound)<br><img id=Codehighlighter1_143_553_Open_Image onclick="this.style.display='none'; Codehighlighter1_143_553_Open_Text.style.display='none'; Codehighlighter1_143_553_Closed_Image.style.display='inline'; Codehighlighter1_143_553_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_143_553_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_143_553_Closed_Text.style.display='none'; Codehighlighter1_143_553_Open_Image.style.display='inline'; Codehighlighter1_143_553_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_143_553_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_143_553_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(hi&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;low)&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;middlePos&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;lowBound</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(highBound</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">lowBound)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;middlePos&nbsp;is&nbsp;now&nbsp;at&nbsp;the&nbsp;element&nbsp;in&nbsp;the&nbsp;middle<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;between&nbsp;lowBound&nbsp;and&nbsp;highBound,&nbsp;so&nbsp;we&nbsp;just&nbsp;add<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;it&nbsp;to&nbsp;the&nbsp;tree</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;AddElement&nbsp;(&nbsp;theOrderedArray[middlePos]&nbsp;)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Pick&nbsp;the&nbsp;middle&nbsp;one&nbsp;"to&nbsp;the&nbsp;left"</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;AddFromOrderedArray(lowBound,middlePos</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Pick&nbsp;the&nbsp;middle&nbsp;one&nbsp;"to&nbsp;the&nbsp;right"</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;AddFromOrderedArray(middlePos</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,highBound)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<strong><span style="BACKGROUND-COLOR: #ccffcc"><span style="BACKGROUND-COLOR: #ff9900"><br><br><span style="FONT-SIZE: 18pt"><em>删除一个元素<br></em></span></span><br></span></strong>
<p><span>首先要找到要删除的元素</span><span>E</span><span>，有两种方法：<br></span><span><span>1．&nbsp;</span></span><span>通过遍历找到这个元素</span><span>E<br></span><span><span>2．&nbsp;</span></span><span>给每个元素一个指向双亲的指针<br><br></span><span>接下来就是删除的过程了：<br></span><span><span>1．&nbsp;</span></span><span>剪断</span><span>E</span><span>与他双亲的连接<br></span><span><span>2．&nbsp;</span></span><span>将左右孩子所在的子树同其他元素一样加到树中<br></span><span><span>3．&nbsp;</span></span><span>删除</span><span>E</span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;RemoveElement(TreeElement</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;theOneToRemove)<br><img id=Codehighlighter1_48_885_Open_Image onclick="this.style.display='none'; Codehighlighter1_48_885_Open_Text.style.display='none'; Codehighlighter1_48_885_Closed_Image.style.display='inline'; Codehighlighter1_48_885_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_48_885_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_48_885_Closed_Text.style.display='none'; Codehighlighter1_48_885_Open_Image.style.display='inline'; Codehighlighter1_48_885_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_48_885_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_48_885_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;TreeElement</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pParent&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;theOneToRemove</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetParent();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Ok,&nbsp;so&nbsp;it&nbsp;has&nbsp;a&nbsp;parent,&nbsp;then&nbsp;we'll&nbsp;simply&nbsp;just&nbsp;disconnect&nbsp;it.</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pParent)<br><img id=Codehighlighter1_189_418_Open_Image onclick="this.style.display='none'; Codehighlighter1_189_418_Open_Text.style.display='none'; Codehighlighter1_189_418_Closed_Image.style.display='inline'; Codehighlighter1_189_418_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_189_418_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_189_418_Closed_Text.style.display='none'; Codehighlighter1_189_418_Open_Image.style.display='inline'; Codehighlighter1_189_418_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_189_418_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_189_418_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(pParent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetLeftChild()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;theOneToRemove)<br><img id=Codehighlighter1_248_292_Open_Image onclick="this.style.display='none'; Codehighlighter1_248_292_Open_Text.style.display='none'; Codehighlighter1_248_292_Closed_Image.style.display='inline'; Codehighlighter1_248_292_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_248_292_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_248_292_Closed_Text.style.display='none'; Codehighlighter1_248_292_Open_Image.style.display='inline'; Codehighlighter1_248_292_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_248_292_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_248_292_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pParent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetLeftChild(NULL);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_309_414_Open_Image onclick="this.style.display='none'; Codehighlighter1_309_414_Open_Text.style.display='none'; Codehighlighter1_309_414_Closed_Image.style.display='inline'; Codehighlighter1_309_414_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_309_414_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_309_414_Closed_Text.style.display='none'; Codehighlighter1_309_414_Open_Image.style.display='inline'; Codehighlighter1_309_414_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_309_414_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_309_414_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ASSERT(pParent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetRightChild()&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;theOneToRemove);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pParent</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">SetRightChild(NULL);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_429_522_Open_Image onclick="this.style.display='none'; Codehighlighter1_429_522_Open_Text.style.display='none'; Codehighlighter1_429_522_Closed_Image.style.display='inline'; Codehighlighter1_429_522_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_429_522_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_429_522_Closed_Text.style.display='none'; Codehighlighter1_429_522_Open_Image.style.display='inline'; Codehighlighter1_429_522_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_429_522_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_429_522_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;No&nbsp;parent?&nbsp;Then&nbsp;we're&nbsp;removing&nbsp;the&nbsp;root&nbsp;element.</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theTopMostElement&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;NULL;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;Disconnected,&nbsp;now&nbsp;we&nbsp;reconnect&nbsp;its&nbsp;children&nbsp;(if&nbsp;any)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;just&nbsp;by&nbsp;adding&nbsp;them&nbsp;as&nbsp;we&nbsp;add&nbsp;any&nbsp;other&nbsp;node.</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(theOneToRemove</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetLeftChild())<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;AddElement(theOneToRemove</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetLeftChild());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(theOneToRemove</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetRightChild())<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;AddElement(theOneToRemove</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetRightChild());<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Zap&nbsp;the&nbsp;element&nbsp;(if&nbsp;that's&nbsp;what&nbsp;you&nbsp;want&nbsp;to&nbsp;do)</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;delete&nbsp;theOneToRemove;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<span style="BACKGROUND-COLOR: #ccffcc"><br><span style="BACKGROUND-COLOR: #ffffff">注解：</span></span>
<p><span>通过函数回调</span><span> </span><span>遍历二叉树</span></p>
注：函数回调例如AddElement(theOneToRemove-&gt;GetRightChild());
<p><span>简而言之，回调函数就是一个通过函数指针调用的函数。如果你把函数的指针（地址）作为参数传递给另一个函数，当这个指针被用为调用它所指向的函数时，我们就说这是回调函数。<br></span><span>可以把调用者与被调用者分开。调用者不关心谁是被调用者，所有它需知道的，只是存在一个具有某种特定原型、某些限制条件（如返回值为</span><span>int</span><span>）的被调用函数。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #内容选自CodeGuru<br>若理解错误，欢迎指正！</span></p>
</o:p></span></span>
<img src ="http://www.cppblog.com/zytoftuncun/aggbug/28566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-07-22 12:27 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/07/22/28566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Euclid扩展算法</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/06/10/25982.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Sun, 10 Jun 2007 10:25:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/06/10/25982.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/25982.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/06/10/25982.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/25982.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/25982.html</trackback:ping><description><![CDATA[满足d=gcd(a,b)=ax+by<br>gcd(b,a%b)=bx'+(a%b)y'=bx'+(a-(a/b)b)y'=bx'+ay'-b(a/b)y'=ay'+b(x'-(a/b)y')<br>只需满足<br>x=y'<br>y=x'-(a/b)y'<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">d=gcd(a,b)=ax+by</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;extEuclid(</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;b,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">x,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">y)<br><img id=Codehighlighter1_98_205_Open_Image onclick="this.style.display='none'; Codehighlighter1_98_205_Open_Text.style.display='none'; Codehighlighter1_98_205_Closed_Image.style.display='inline'; Codehighlighter1_98_205_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_98_205_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_98_205_Closed_Text.style.display='none'; Codehighlighter1_98_205_Open_Image.style.display='inline'; Codehighlighter1_98_205_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_98_205_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_98_205_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;d,tmp;<br><img id=Codehighlighter1_119_137_Open_Image onclick="this.style.display='none'; Codehighlighter1_119_137_Open_Text.style.display='none'; Codehighlighter1_119_137_Closed_Image.style.display='inline'; Codehighlighter1_119_137_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_119_137_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_119_137_Closed_Text.style.display='none'; Codehighlighter1_119_137_Open_Image.style.display='inline'; Codehighlighter1_119_137_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">!</span><span style="COLOR: #000000">b)</span><span id=Codehighlighter1_119_137_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_119_137_Open_Text><span style="COLOR: #000000">{x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;a;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">extEuclid(b,a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">b,x,y);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;tmp</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">x;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">tmp</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(a</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">b)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;d;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img id=Codehighlighter1_218_335_Open_Image onclick="this.style.display='none'; Codehighlighter1_218_335_Open_Text.style.display='none'; Codehighlighter1_218_335_Closed_Image.style.display='inline'; Codehighlighter1_218_335_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_218_335_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_218_335_Closed_Text.style.display='none'; Codehighlighter1_218_335_Open_Image.style.display='inline'; Codehighlighter1_218_335_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()</span><span id=Codehighlighter1_218_335_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_218_335_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,b,x</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">b;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">99&nbsp;78</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">extEuclid(a,b,x,y)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">y;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">system("pause");</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
奇怪的是VC6.0编译通过后执行，无论如何x和y的值始终为0。而用dev－c++编译通过后显示结果正常！<br>如果将输出改为<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">extEuclid(a,b,x,y)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">x</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\t</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">y;</span></div>
VC6.0编译后运行也就显示正常了！<br>I DON'T KNOW WHY?
<img src ="http://www.cppblog.com/zytoftuncun/aggbug/25982.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-06-10 18:25 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/06/10/25982.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(a^b)%n迭代法实现</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/06/05/25603.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Tue, 05 Jun 2007 14:44:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/06/05/25603.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/25603.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/06/05/25603.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/25603.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/25603.html</trackback:ping><description><![CDATA[查了一下书,知道了这样一个公式,这样昨天二分法的疑问就可以解决了,也可以用迭代法实现了:看来吴文虎编写的书还挺配套的.<br><img height=95 alt="" src="http://www.cppblog.com/images/cppblog_com/zytoftuncun/qu.jpg" width=684 border=0><br>也就是 a^b%n=((a^b-1)*a)%n====&gt;(a*b)%n=((a%n)*b)%n===&gt;a^b%n=(((a^(b/2))%n)*a^(b/2))%n
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">迭代法</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;modexp2(</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;b,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n)<br><img id=Codehighlighter1_37_103_Open_Image onclick="this.style.display='none'; Codehighlighter1_37_103_Open_Text.style.display='none'; Codehighlighter1_37_103_Closed_Image.style.display='inline'; Codehighlighter1_37_103_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_37_103_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_103_Closed_Text.style.display='none'; Codehighlighter1_37_103_Open_Image.style.display='inline'; Codehighlighter1_37_103_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_37_103_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_37_103_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;r;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">b</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">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(r</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a)</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;r;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
书中还说可以提高效率,研究后再说. <br>(a^b)%n=(a^（b/2）%n * a^（b/2）%n)%n<br>根据这个公式，讨论奇数和偶数处理<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;modExp(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b,&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n)<br><img id=Codehighlighter1_32_116_Open_Image onclick="this.style.display='none'; Codehighlighter1_32_116_Open_Text.style.display='none'; Codehighlighter1_32_116_Closed_Image.style.display='inline'; Codehighlighter1_32_116_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_32_116_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_32_116_Closed_Text.style.display='none'; Codehighlighter1_32_116_Open_Image.style.display='inline'; Codehighlighter1_32_116_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_32_116_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_32_116_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;<br><img id=Codehighlighter1_57_103_Open_Image onclick="this.style.display='none'; Codehighlighter1_57_103_Open_Text.style.display='none'; Codehighlighter1_57_103_Closed_Image.style.display='inline'; Codehighlighter1_57_103_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_57_103_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_57_103_Closed_Text.style.display='none'; Codehighlighter1_57_103_Open_Image.style.display='inline'; Codehighlighter1_57_103_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(b)</span><span id=Codehighlighter1_57_103_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_57_103_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_71_80_Open_Image onclick="this.style.display='none'; Codehighlighter1_71_80_Open_Text.style.display='none'; Codehighlighter1_71_80_Closed_Image.style.display='inline'; Codehighlighter1_71_80_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_71_80_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_71_80_Closed_Text.style.display='none'; Codehighlighter1_71_80_Open_Image.style.display='inline'; Codehighlighter1_71_80_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(b</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_71_80_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_71_80_Open_Text><span style="COLOR: #000000">{d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">d</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;d;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/zytoftuncun/aggbug/25603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-06-05 22:44 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/06/05/25603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>(a^b)%n---ACM例题的疑惑</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/06/03/25412.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Sun, 03 Jun 2007 14:38:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/06/03/25412.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/25412.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/06/03/25412.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/25412.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/25412.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">(a^b)%n</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这里用的是什么方法呢?</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;modExp(</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;b,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n)<br><img id=Codehighlighter1_73_157_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_157_Open_Text.style.display='none'; Codehighlighter1_73_157_Closed_Image.style.display='inline'; Codehighlighter1_73_157_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_73_157_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_157_Closed_Text.style.display='none'; Codehighlighter1_73_157_Open_Image.style.display='inline'; Codehighlighter1_73_157_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_73_157_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_73_157_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(b)<br><img id=Codehighlighter1_100_144_Open_Image onclick="this.style.display='none'; Codehighlighter1_100_144_Open_Text.style.display='none'; Codehighlighter1_100_144_Closed_Image.style.display='inline'; Codehighlighter1_100_144_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_100_144_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_100_144_Closed_Text.style.display='none'; Codehighlighter1_100_144_Open_Image.style.display='inline'; Codehighlighter1_100_144_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_100_144_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_100_144_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(b</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">y</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;t;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">常规</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;modexp(</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;b,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n)<br><img id=Codehighlighter1_194_247_Open_Image onclick="this.style.display='none'; Codehighlighter1_194_247_Open_Text.style.display='none'; Codehighlighter1_194_247_Closed_Image.style.display='inline'; Codehighlighter1_194_247_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_194_247_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_194_247_Closed_Text.style.display='none'; Codehighlighter1_194_247_Open_Image.style.display='inline'; Codehighlighter1_194_247_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_194_247_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_194_247_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">b;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)t</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">t</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;t</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_265_398_Open_Image onclick="this.style.display='none'; Codehighlighter1_265_398_Open_Text.style.display='none'; Codehighlighter1_265_398_Closed_Image.style.display='inline'; Codehighlighter1_265_398_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_265_398_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_265_398_Closed_Text.style.display='none'; Codehighlighter1_265_398_Open_Image.style.display='inline'; Codehighlighter1_265_398_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_265_398_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_265_398_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">modExp(a,b,n)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">std::endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">modexp(a,b,n)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">std::endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
谁能给我讲讲它这个方法是什么数学原理呢? <br>//第二个函数仅为测试正确性设置,不考虑溢出问题
<img src ="http://www.cppblog.com/zytoftuncun/aggbug/25412.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-06-03 22:38 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/06/03/25412.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Least Common Mutiple</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/06/03/25369.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Sun, 03 Jun 2007 03:44:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/06/03/25369.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/25369.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/06/03/25369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/25369.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/25369.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">非递归辗转相除求最大公约数</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;gcd(</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;b)<br><img id=Codehighlighter1_37_107_Open_Image onclick="this.style.display='none'; Codehighlighter1_37_107_Open_Text.style.display='none'; Codehighlighter1_37_107_Closed_Image.style.display='inline'; Codehighlighter1_37_107_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_37_107_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_37_107_Closed_Text.style.display='none'; Codehighlighter1_37_107_Open_Image.style.display='inline'; Codehighlighter1_37_107_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_37_107_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_37_107_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(r)<br><img id=Codehighlighter1_68_94_Open_Image onclick="this.style.display='none'; Codehighlighter1_68_94_Open_Text.style.display='none'; Codehighlighter1_68_94_Closed_Image.style.display='inline'; Codehighlighter1_68_94_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_68_94_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_68_94_Closed_Text.style.display='none'; Codehighlighter1_68_94_Open_Image.style.display='inline'; Codehighlighter1_68_94_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_68_94_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_68_94_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">r;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">最小公倍数</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;lcm(</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;b)<br><img id=Codehighlighter1_138_170_Open_Image onclick="this.style.display='none'; Codehighlighter1_138_170_Open_Text.style.display='none'; Codehighlighter1_138_170_Closed_Image.style.display='inline'; Codehighlighter1_138_170_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_138_170_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_138_170_Closed_Text.style.display='none'; Codehighlighter1_138_170_Open_Image.style.display='inline'; Codehighlighter1_138_170_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_138_170_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_138_170_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b)</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">gcd(a,b):</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/zytoftuncun/aggbug/25369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-06-03 11:44 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/06/03/25369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Greatest Common Divisor</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/06/02/25352.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Sat, 02 Jun 2007 11:59:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/06/02/25352.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/25352.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/06/02/25352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/25352.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/25352.html</trackback:ping><description><![CDATA[辗转相除递归算法:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">求最大公约数,公式if(a=b*q+r)then(gcd(a,b)=gcd(b,r))</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;gcd(</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;b)<br><img id=Codehighlighter1_67_97_Open_Image onclick="this.style.display='none'; Codehighlighter1_67_97_Open_Text.style.display='none'; Codehighlighter1_67_97_Closed_Image.style.display='inline'; Codehighlighter1_67_97_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_67_97_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_67_97_Closed_Text.style.display='none'; Codehighlighter1_67_97_Open_Image.style.display='inline'; Codehighlighter1_67_97_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_67_97_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_67_97_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">b)</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">gcd(b,a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">b):b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
非递归算法:<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">非递归辗转相除</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;gcd(</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;b)<br><img id=Codehighlighter1_31_101_Open_Image onclick="this.style.display='none'; Codehighlighter1_31_101_Open_Text.style.display='none'; Codehighlighter1_31_101_Closed_Image.style.display='inline'; Codehighlighter1_31_101_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_31_101_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_101_Closed_Text.style.display='none'; Codehighlighter1_31_101_Open_Image.style.display='inline'; Codehighlighter1_31_101_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_31_101_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_31_101_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(r)<br><img id=Codehighlighter1_62_88_Open_Image onclick="this.style.display='none'; Codehighlighter1_62_88_Open_Text.style.display='none'; Codehighlighter1_62_88_Closed_Image.style.display='inline'; Codehighlighter1_62_88_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_62_88_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_62_88_Closed_Text.style.display='none'; Codehighlighter1_62_88_Open_Image.style.display='inline'; Codehighlighter1_62_88_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_62_88_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_62_88_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">r;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;b;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/zytoftuncun/aggbug/25352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-06-02 19:59 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/06/02/25352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mergesort优化若干证明</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/01/29/18149.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Mon, 29 Jan 2007 08:52:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/01/29/18149.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/18149.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/01/29/18149.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/18149.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/18149.html</trackback:ping><description><![CDATA[     合并排序的runningtime是O(nlgn),插入排序为O(n*n),当合并排序的划分到一定程度时可以应用插入排序。此时插入排序比合并排序的效率高,所以对合并排序做个修改：n/k 长度为k的子序列用插入法排序。（要确定k的值）<br /><br />a.证明最坏情况下，n/k个子序列用插入来排序的时间时O(nk).<br />   插入排序为O(n*n)，那么对长度为k的子序列排序为O(k*k),n/k个子序列排序时间和是(n/k)*O(k*k)=O(n*k),得证<br /><br />b.证明在最坏情况下各子序列可以在O(nlg(n/k))下合并.<br /><br />c.设修改后合并算法的时间阶为O(nk+nlg(n/k)).请给出最大渐近值k（以O记号，k是n的函数）使得修改后的算法有和标准合并算法一样的渐近运行时间<br /><br />d.k的值在实际中如何确定？<img src ="http://www.cppblog.com/zytoftuncun/aggbug/18149.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-01-29 16:52 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/01/29/18149.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MERGESORT</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/01/29/18130.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Mon, 29 Jan 2007 02:25:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/01/29/18130.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/18130.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/01/29/18130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/18130.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/18130.html</trackback:ping><description><![CDATA[
		<p>自己错的程序mergesort放在各个论坛上寻求答案，结果三天没人回复。想来也是高手无暇，菜鸟无语。于是自己静下心来，仔细看了一下，还是标号弄错了。既然开了两个数组，那么数据拷贝进去后，标号应该是当前数组的，结果用了原来数组的标号，导致错误。这是修改后的源码：<br /></p>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				<span style="COLOR: #008000">//</span>
				<span style="COLOR: #008000">mergesort</span>
				<span style="COLOR: #008000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #000000">#include</span>
				<span style="COLOR: #000000">&lt;</span>
				<span style="COLOR: #000000">iostream</span>
				<span style="COLOR: #000000">&gt;</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">using</span>
				<span style="COLOR: #000000"> </span>
				<span style="COLOR: #0000ff">namespace</span>
				<span style="COLOR: #000000"> std;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_89_418_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_418_Open_Text.style.display='none'; Codehighlighter1_89_418_Closed_Image.style.display='inline'; Codehighlighter1_89_418_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_89_418_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_89_418_Closed_Text.style.display='none'; Codehighlighter1_89_418_Open_Image.style.display='inline'; Codehighlighter1_89_418_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> merge(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> A[],</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> p,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> q,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> r)</span>
				<span id="Codehighlighter1_89_418_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_89_418_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> n1</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">q</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">p</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> n2</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">r</span>
						<span style="COLOR: #000000">-</span>
						<span style="COLOR: #000000">q;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> L </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">int</span>
						<span style="COLOR: #000000">[n1];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> R </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">int</span>
						<span style="COLOR: #000000">[n2];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </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">0</span>
						<span style="COLOR: #000000">;i</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">n1;</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  L[i]</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">A[p</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">i];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /></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">0</span>
						<span style="COLOR: #000000">;j</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">n2;</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">j)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  R[j]</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">A[q</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000">j];<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> i</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">0</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> k</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">p;<br /><img id="Codehighlighter1_280_340_Open_Image" onclick="this.style.display='none'; Codehighlighter1_280_340_Open_Text.style.display='none'; Codehighlighter1_280_340_Closed_Image.style.display='inline'; Codehighlighter1_280_340_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_280_340_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_280_340_Closed_Text.style.display='none'; Codehighlighter1_280_340_Open_Image.style.display='inline'; Codehighlighter1_280_340_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">while</span>
						<span style="COLOR: #000000">(i</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">n1</span>
						<span style="COLOR: #000000">&amp;&amp;</span>
						<span style="COLOR: #000000">j</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">n2)</span>
						<span id="Codehighlighter1_280_340_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_280_340_Open_Text">
								<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_298_313_Open_Image" onclick="this.style.display='none'; Codehighlighter1_298_313_Open_Text.style.display='none'; Codehighlighter1_298_313_Closed_Image.style.display='inline'; Codehighlighter1_298_313_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_298_313_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_298_313_Closed_Text.style.display='none'; Codehighlighter1_298_313_Open_Image.style.display='inline'; Codehighlighter1_298_313_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
								<span style="COLOR: #0000ff">if</span>
								<span style="COLOR: #000000">(L[i]</span>
								<span style="COLOR: #000000">&lt;=</span>
								<span style="COLOR: #000000">R[j])</span>
								<span id="Codehighlighter1_298_313_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.cppblog.com/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_298_313_Open_Text">
										<span style="COLOR: #000000">{A[k</span>
										<span style="COLOR: #000000">++</span>
										<span style="COLOR: #000000">]</span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000">L[i</span>
										<span style="COLOR: #000000">++</span>
										<span style="COLOR: #000000">];}</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img id="Codehighlighter1_322_337_Open_Image" onclick="this.style.display='none'; Codehighlighter1_322_337_Open_Text.style.display='none'; Codehighlighter1_322_337_Closed_Image.style.display='inline'; Codehighlighter1_322_337_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
										<img id="Codehighlighter1_322_337_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_322_337_Closed_Text.style.display='none'; Codehighlighter1_322_337_Open_Image.style.display='inline'; Codehighlighter1_322_337_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />  </span>
								<span style="COLOR: #0000ff">else</span>
								<span style="COLOR: #000000"> </span>
								<span id="Codehighlighter1_322_337_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
										<img src="http://www.cppblog.com/images/dot.gif" />
								</span>
								<span id="Codehighlighter1_322_337_Open_Text">
										<span style="COLOR: #000000">{A[k</span>
										<span style="COLOR: #000000">++</span>
										<span style="COLOR: #000000">]</span>
										<span style="COLOR: #000000">=</span>
										<span style="COLOR: #000000">R[j</span>
										<span style="COLOR: #000000">++</span>
										<span style="COLOR: #000000">];}</span>
								</span>
								<span style="COLOR: #000000">
										<br />
										<img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_354_372_Open_Image" onclick="this.style.display='none'; Codehighlighter1_354_372_Open_Text.style.display='none'; Codehighlighter1_354_372_Closed_Image.style.display='inline'; Codehighlighter1_354_372_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_354_372_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_354_372_Closed_Text.style.display='none'; Codehighlighter1_354_372_Open_Image.style.display='inline'; Codehighlighter1_354_372_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">while</span>
						<span style="COLOR: #000000">(i</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">n1)</span>
						<span id="Codehighlighter1_354_372_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_354_372_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  A[k</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">]</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">L[i</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">];}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_386_404_Open_Image" onclick="this.style.display='none'; Codehighlighter1_386_404_Open_Text.style.display='none'; Codehighlighter1_386_404_Closed_Image.style.display='inline'; Codehighlighter1_386_404_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" />
								<img id="Codehighlighter1_386_404_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_386_404_Closed_Text.style.display='none'; Codehighlighter1_386_404_Open_Image.style.display='inline'; Codehighlighter1_386_404_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">while</span>
						<span style="COLOR: #000000">(j</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">n2)</span>
						<span id="Codehighlighter1_386_404_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_386_404_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />  A[k</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">]</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">R[j</span>
								<span style="COLOR: #000000">++</span>
								<span style="COLOR: #000000">];}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_455_563_Open_Image" onclick="this.style.display='none'; Codehighlighter1_455_563_Open_Text.style.display='none'; Codehighlighter1_455_563_Closed_Image.style.display='inline'; Codehighlighter1_455_563_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_455_563_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_455_563_Closed_Text.style.display='none'; Codehighlighter1_455_563_Open_Image.style.display='inline'; Codehighlighter1_455_563_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> mergesort(</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> A[],</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> p,</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> r)</span>
				<span id="Codehighlighter1_455_563_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_455_563_Open_Text">
						<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> q;<br /><img id="Codehighlighter1_473_549_Open_Image" onclick="this.style.display='none'; Codehighlighter1_473_549_Open_Text.style.display='none'; Codehighlighter1_473_549_Closed_Image.style.display='inline'; Codehighlighter1_473_549_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_473_549_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_473_549_Closed_Text.style.display='none'; Codehighlighter1_473_549_Open_Image.style.display='inline'; Codehighlighter1_473_549_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">if</span>
						<span style="COLOR: #000000">(p</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">r)</span>
						<span id="Codehighlighter1_473_549_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_473_549_Open_Text">
								<span style="COLOR: #000000">{<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  q</span>
								<span style="COLOR: #000000">=</span>
								<span style="COLOR: #000000">(p</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">r)</span>
								<span style="COLOR: #000000">/</span>
								<span style="COLOR: #000000">2</span>
								<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  mergesort(A,p,q);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  mergesort(A,q</span>
								<span style="COLOR: #000000">+</span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">,r);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  merge(A,p,q,r);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" /> }</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img id="Codehighlighter1_576_689_Open_Image" onclick="this.style.display='none'; Codehighlighter1_576_689_Open_Text.style.display='none'; Codehighlighter1_576_689_Closed_Image.style.display='inline'; Codehighlighter1_576_689_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
						<img id="Codehighlighter1_576_689_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_576_689_Closed_Text.style.display='none'; Codehighlighter1_576_689_Open_Image.style.display='inline'; Codehighlighter1_576_689_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedBlock.gif" align="top" />
				</span>
				<span style="COLOR: #0000ff">int</span>
				<span style="COLOR: #000000"> main()</span>
				<span id="Codehighlighter1_576_689_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
						<img src="http://www.cppblog.com/images/dot.gif" />
				</span>
				<span id="Codehighlighter1_576_689_Open_Text">
						<span style="COLOR: #000000">{<br /><img id="Codehighlighter1_591_609_Open_Image" onclick="this.style.display='none'; Codehighlighter1_591_609_Open_Text.style.display='none'; Codehighlighter1_591_609_Closed_Image.style.display='inline'; Codehighlighter1_591_609_Closed_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_591_609_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_591_609_Closed_Text.style.display='none'; Codehighlighter1_591_609_Open_Image.style.display='inline'; Codehighlighter1_591_609_Open_Text.style.display='inline';" src="http://www.cppblog.com/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> b[</span>
						<span style="COLOR: #000000">6</span>
						<span style="COLOR: #000000">]</span>
						<span style="COLOR: #000000">=</span>
						<span id="Codehighlighter1_591_609_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://www.cppblog.com/images/dot.gif" />
						</span>
						<span id="Codehighlighter1_591_609_Open_Text">
								<span style="COLOR: #000000">{</span>
								<span style="COLOR: #000000">11</span>
								<span style="COLOR: #000000">,</span>
								<span style="COLOR: #000000">65</span>
								<span style="COLOR: #000000">,</span>
								<span style="COLOR: #000000">53</span>
								<span style="COLOR: #000000">,</span>
								<span style="COLOR: #000000">78</span>
								<span style="COLOR: #000000">,</span>
								<span style="COLOR: #000000">38</span>
								<span style="COLOR: #000000">,</span>
								<span style="COLOR: #000000">63</span>
								<span style="COLOR: #000000">}</span>
						</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />    mergesort(b,</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">5</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </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">0</span>
						<span style="COLOR: #000000">;i</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">6</span>
						<span style="COLOR: #000000">;</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">i)<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" />  cout</span>
						<span style="COLOR: #000000">&lt;&lt;</span>
						<span style="COLOR: #000000">b[i]</span>
						<span style="COLOR: #000000">&lt;&lt;</span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">\t</span>
						<span style="COLOR: #000000">'</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/InBlock.gif" align="top" /> </span>
						<span style="COLOR: #0000ff">return</span>
						<span style="COLOR: #000000">(</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">);<br /><img src="http://www.cppblog.com/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span>
				</span>
				<span style="COLOR: #000000">
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						<br />
						<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
				</span>
		</div>
		<p>小小的错误，找了我半天</p>
<img src ="http://www.cppblog.com/zytoftuncun/aggbug/18130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-01-29 10:25 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/01/29/18130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Divide and Conquer</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/01/25/17992.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Thu, 25 Jan 2007 12:16:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/01/25/17992.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/17992.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/01/25/17992.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/17992.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/17992.html</trackback:ping><description><![CDATA[
		<p>     分治法，顾名思义：切分然后治理，治理就是各个解决问题然后合并整理。递归的解决分成n个较小规模的子问题，然后将各个结果合并从而解决原来的问题。<br />DIVIDE：将问题分解成一系列子问题。<br />CONQUER：递归地解决各个子问题，若问题足够小，则直接解决。<br />COMBINE：将子问题的结果合并成原问题的解。<br />自己编的代码，结果又运行不起来：ps:几经修改，看来细节问题要注意，简化推理是个好办法<br />//mergesort<br />#include&lt;iostream&gt;<br />using namespace std;</p>
		<p>int merge(int*A,int p,int q,int r){<br /> int n1=q-p+1;<br /> int n2=r-q;<br /> int* L = new int[n1];<br /> int* R = new int[n2];<br /> for(int i=0;i&lt;n1;++i)<br />  L[i]=A[p+i];<br /> for(int j=0;j&lt;n2;++j)<br />  R[j]=A[q+1+j];<br /> i=0;j=0;<br /> for(int k=p;k&lt;r;k++){<br />  if(L[i]&lt;=R[j]){A[k]=L[i++];}<br />  else {A[k]=R[j++];}<br /> }<br /> return(0);<br />}</p>
		<p>int mergesort(int*A,int p,int r){<br /> int q;<br /> if(p&lt;r){<br />  q=(p+r)/2;<br />  mergesort(A,p,q);<br />  mergesort(A,q+1,r);<br />  merge(A,p,q,r);<br /> }<br /> return(0);<br />}</p>
		<p>int main(){<br />    int b[6]={11,65,53,78,38,63};<br />    mergesort(b,0,5);<br /> for(int i=0;i&lt;6;++i)<br />  cout&lt;&lt;b[i]&lt;&lt;'\t';<br /> return(0);<br />}</p>
		<p>以下引用自：gooler的专栏<a href="http://blog.csdn.net/Gooler/archive/2006/03/22/632422.aspx">http://blog.csdn.net/Gooler/archive/2006/03/22/632422.aspx</a>有各种排序算法quicksort,heapsort...<br /><span style="COLOR: rgb(0,102,0)">/* </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * A is an array and p, q, and r are indices numbering elements of the array </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * such that p &lt;= q &lt; r. </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * This procedure assumes that the subarrays A[p. .q] and A[q + 1. .r] are in </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * sorted order. It merges them to form a single sorted subarray that replaces </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * the current subarray A[p. .r]. </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> */</span><br />void merge(int A[], int p, int q, int r) {<br />    int i, j, k, size;<br />    int* B;<br />    <br />    size = r - p + 1;<br /><br />    B = new int[size]; <span style="COLOR: rgb(0,102,0)">/* temp arry for storing the merge result */</span><br />    <br />    <span style="COLOR: rgb(0,102,0)">/* initialize B */</span><br />    for (i = 0; i &lt; size; ++i) {<br />        B[i] = 0;<br />    }<br /><br />    i = p;<br />    j = q + 1;<br />    k = 0;<br />    <br />    <span style="COLOR: rgb(0,102,0)">/* compare and copy the smaller to B */</span><br />    while (i &lt;= q &amp;&amp; j &lt;= r) {<br />        if (A[i] &lt; A[j]) {<br />            B[k++] = A[i++];<br />        } else {<br />            B[k++] = A[j++];<br />        }<br />    }<br />    <br />    <span style="COLOR: rgb(0,102,0)">/* copy the rest to B */</span><br />    while (i &lt;= q) {<br />        B[k++] = A[i++];<br />    }    <br />    while (j &lt;= r) {<br />        B[k++] = A[j++];<br />    }<br />    <br />    <span style="COLOR: rgb(0,102,0)">/* replace A[p..r] with B[0..r-p] */</span><br />    for (i = p, k = 0; i &lt;= r; ++i, ++k) {<br />        A[i] = B[k];<br />    }<br /><br />    delete[] B;<br />}<br /><br /><span style="COLOR: rgb(0,102,0)">/*</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * This procedure sorts the elements in the subarray A[p. .r]. </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> *</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * If p &gt;= r, the subarray has at most one element and is therefore </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * already sorted. Otherwise, the divide step simply computes an index</span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * q that partitions A[p. .r] into two subarrays: A[p. .q], containing n/2 </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> * elements, and A[q + 1. .r], containing n/2 elements. </span><br style="COLOR: rgb(0,102,0)" /><span style="COLOR: rgb(0,102,0)"> */</span><br />void mergeSort(int A[], int p, int r) {<br />    if (p &gt;= r) return;<br />    <br />    int q = (p + r) / 2;<br />    <br />    mergeSort(A, p, q);<br />    mergeSort(A, q + 1, r);<br />    merge(A, p, q, r);<br />}<br /><br /></p>
<img src ="http://www.cppblog.com/zytoftuncun/aggbug/17992.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-01-25 20:16 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/01/25/17992.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>INSERT-SORT</title><link>http://www.cppblog.com/zytoftuncun/archive/2007/01/24/17968.html</link><dc:creator>AIBPXTSHMF</dc:creator><author>AIBPXTSHMF</author><pubDate>Wed, 24 Jan 2007 14:10:00 GMT</pubDate><guid>http://www.cppblog.com/zytoftuncun/archive/2007/01/24/17968.html</guid><wfw:comment>http://www.cppblog.com/zytoftuncun/comments/17968.html</wfw:comment><comments>http://www.cppblog.com/zytoftuncun/archive/2007/01/24/17968.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zytoftuncun/comments/commentRss/17968.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zytoftuncun/services/trackbacks/17968.html</trackback:ping><description><![CDATA[排序选择何种算法取决于排序元素个数及已排序的程度以及所使用的存储设备<br />  A[1..n]含n个元素的数组  个数n=length[A]<br />  插入排序－－适合少量元素的排序<br />   for j&lt;-- 2 to length[A]<br />       do key&lt;--A[j]  <br />         //将A[j]插入到排好序的序列A[1..j-1]<br />          i&lt;--j-1<br />         while i&gt;0 and A[i]&gt;key<br />            do A[i+1]&lt;--A[i]<br />            i&lt;-- i-1<br />         A[i-1]&lt;--key<br /><br />用c++源程序描述：<br />#include&lt;iostream&gt;<br />using namespace std;<br />int insertSort(int*array){<br />int key,i;<br />for(int j=1;j&lt;6;++j){<br />     key=array[j];  //将第二个开始的元素放入key<br />      i=j-1;<br />      while(i&gt;=0&amp;&amp;array[i]&gt;key){     //将大于key的元素至key原本所在位置的所有元素向后移动一个，并覆盖了key原来的位置<br />           array[i+1]=array[i];<br />                   --i;<br />                                           }<br />       array[i+1]=key;//将key插入到array[i]的位置<br />                            }<br />return(0);<br /><br />}<br /><br />int main(){<br />int a[6]={11,65,53,78,38,63};<br />insertSort(a);<br />for(int i=0;i&lt;6;++i)<br />cout&lt;&lt;a[i]&lt;&lt;'\t';<br />return(0);<br />}<br /><br />该方法在算法设计中叫增量方法Incremental<br />        <br />   <img src ="http://www.cppblog.com/zytoftuncun/aggbug/17968.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zytoftuncun/" target="_blank">AIBPXTSHMF</a> 2007-01-24 22:10 <a href="http://www.cppblog.com/zytoftuncun/archive/2007/01/24/17968.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>