<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[怎样用c语言中堆排序实现一个数组a[10]的排序]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 01 Oct 2009 00:54:42 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	http://topic.csdn.net/u/20070929/14/b183cd03-d780-4c59-a666-ab127f12f7b1.html<br/><div class="code"><br/>#include &lt;stdio.h&gt;<br/><br/>void sift(int a&#91;&#93;, int i, int n)/* i为根节点,n为节点总数 */<br/>&#123;<br/>&nbsp;&nbsp;int child, tmp;<br/><br/>&nbsp;&nbsp;for (tmp = a&#91;i&#93;; n &gt; 2 * i; i = child)<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;child = 2 * i;&nbsp;&nbsp;&nbsp;&nbsp; /* i的左孩子为2*i,右孩子为2*i+1 */<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ((child != n-1) &amp;&amp; (a&#91;child+1&#93; &gt; a&#91;child&#93;))&nbsp;&nbsp;&nbsp;&nbsp; /* 让child指向孩子中较大的一个 */<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child++;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (tmp &lt; a&#91;child&#93;)/* 如果孩子节点大 */ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&#91;i&#93; = a&#91;child&#93;;/* 交换孩子节点和根节点 */ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;else<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;a&#91;i&#93; = tmp;&nbsp;&nbsp;&nbsp;&nbsp;/* 将根放在合适位置 */<br/>&#125;<br/><br/>void heapsort(int a&#91;&#93;,int n)/* 对a&#91;1...n&#93;进行排序 */<br/>&#123;<br/>&nbsp;&nbsp;int i, tmp;<br/><br/>&nbsp;&nbsp;for (i = n / 2; i &gt;= 0; i--)/* 建立初始堆 */<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;sift(a, i, n);<br/>&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;for (i = n - 1; i &gt; 0; i--)/* 进行n-1趟排序 */<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;tmp = a&#91;0&#93;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* 交换堆顶元素和最后一个元素 */<br/>&nbsp;&nbsp;&nbsp;&nbsp;a&#91;0&#93; = a&#91;i&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;a&#91;i&#93; = tmp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;sift(a, 0, i);&nbsp;&nbsp;&nbsp;&nbsp;/* 将a&#91;1..n-1&#93;重建为堆 */<br/>&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/><br/>int main(int argc, char* argv&#91;&#93;)<br/>&#123;<br/>&nbsp;&nbsp;int a&#91;7&#93; = &#123;8,9,3,5,1,6,4&#125;;<br/>&nbsp;&nbsp;int i;<br/><br/>&nbsp;&nbsp;heapsort(a, 7);<br/><br/>&nbsp;&nbsp;for (i = 0; i &lt; 7; i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%d&nbsp;&nbsp;&#92;n&quot;, a&#91;i&#93;);<br/><br/><br/>&nbsp;&nbsp;return 0;<br/>&#125;<br/><br/><br/></div><br/><br/><div class="code"><br/>#include &lt;stdio.h&gt;<br/><br/>#define PARENT(i)  i &gt;&gt; 1<br/>#define LEFT(i)    i &lt;&lt; 1<br/>#define RIGHT(i)   (i &lt;&lt; 1) + 1<br/>#define HeapBase   1<br/>long HeapSize = 0;<br/><br/>void Exchange(long* a, long* b)<br/>&#123;<br/>        long t = 0;<br/>        t = *a;<br/>        *a = *b;<br/>        *b = t;<br/>&#125;<br/><br/>void MaxHeapify(long* Ary, long i)<br/>&#123;<br/>        long l = LEFT(i);<br/>        long r = RIGHT(i);<br/>        long largest = 0;<br/><br/>        if (l &lt;= HeapSize)<br/>        &#123;<br/>                if (*(Ary + l) &gt; *(Ary + i))<br/>                        largest = l;<br/>                else<br/>                        largest = i;<br/>        &#125;<br/>        if (r &lt;= HeapSize) <br/>                if (*(Ary + r) &gt; *(Ary + largest)) largest = r;<br/>        if ((largest != i) &amp;&amp; (largest &gt;= HeapBase) &amp;&amp; (largest &lt;= HeapSize)) <br/>        &#123;<br/>                Exchange(Ary + i, Ary + largest);<br/>                MaxHeapify(Ary, largest);<br/>        &#125;<br/>&#125;<br/><br/>void BuildMaxHeap(long* Ary)<br/>&#123;<br/>        long i = 0;<br/>        for (i = HeapSize / 2; i &gt;= HeapBase; i--)<br/>        &#123;<br/>                MaxHeapify(Ary, i);<br/>        &#125;<br/>&#125;<br/><br/>//Ary&#91;1..n&#93;<br/>void HeapSort(long* Ary, long dwSize)<br/>&#123;<br/>        long i = 0;<br/>        HeapSize = dwSize;<br/>        BuildMaxHeap(Ary);<br/>        for (i = dwSize; i &gt;= HeapBase; i--)<br/>        &#123;<br/>                Exchange(Ary + HeapBase, Ary + i);<br/>                HeapSize--;<br/>                MaxHeapify(Ary, HeapBase);<br/>        &#125;<br/>&#125;<br/><br/>int main()<br/>&#123;<br/>        long a&#91;4&#93; = &#123;0&#125;;<br/>        a&#91;1&#93; = 2;<br/>        a&#91;2&#93; = 1;<br/>        a&#91;3&#93; = 8;<br/>        HeapSort(a, 3);<br/>        printf(&quot;%ld&#92;n&quot;, a&#91;1&#93;);<br/>        printf(&quot;%ld&#92;n&quot;, a&#91;2&#93;);<br/>        printf(&quot;%ld&#92;n&quot;, a&#91;3&#93;);<br/>        return 0;<br/>&#125;<br/></div>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 怎样用c语言中堆排序实现一个数组a[10]的排序]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>