﻿<?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++博客-Achiber-随笔分类-排序</title><link>http://www.cppblog.com/Achiber/category/19926.html</link><description>代码改变世界，让我们一起默默的努力！</description><language>zh-cn</language><lastBuildDate>Sat, 15 Sep 2012 14:22:33 GMT</lastBuildDate><pubDate>Sat, 15 Sep 2012 14:22:33 GMT</pubDate><ttl>60</ttl><item><title>堆排序（过程演示）</title><link>http://www.cppblog.com/Achiber/archive/2012/09/15/190812.html</link><dc:creator>王文豪</dc:creator><author>王文豪</author><pubDate>Sat, 15 Sep 2012 14:16:00 GMT</pubDate><guid>http://www.cppblog.com/Achiber/archive/2012/09/15/190812.html</guid><wfw:comment>http://www.cppblog.com/Achiber/comments/190812.html</wfw:comment><comments>http://www.cppblog.com/Achiber/archive/2012/09/15/190812.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Achiber/comments/commentRss/190812.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Achiber/services/trackbacks/190812.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<p>#include &lt;iostream&gt;<br />#include &lt;cstring&gt;<br />#include &lt;vector&gt;<br />#include &lt;queue&gt;<br />#include &lt;algorithm&gt;</p>
<p>using namespace std;<br />const int N = 105;<br />int a[N];</p>
<p>void Heapify(int a[], int i, int size) { /* 大根堆化 使以 i 为根的子树成为最大堆 */<br />&nbsp;&nbsp; int ls = 2*i, rs = 2*i+1;<br />&nbsp;&nbsp; int large;<br />&nbsp;&nbsp; if(ls &lt;= size &amp;&amp; a[ls] &gt; a[i]) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; large = ls;<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; else large = i;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(rs &lt;= size &amp;&amp; a[rs] &gt; a[large]) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; large = rs;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(large != i) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap(a[large], a[i]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heapify(a, large, size);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />}<br />void Build_Heap(int a[], int size) { // 建立堆树<br />&nbsp;&nbsp; for(int i = size/2; i &gt;= 1; i--) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heapify(a, i, size);<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; for(int i = 1; i &lt;= size; i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d ", a[i]);<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; printf("\n");<br />}</p>
<p>void Heap_sort(int a[], int size) {<br />&nbsp;&nbsp; Build_Heap(a, size);<br />&nbsp;&nbsp; int len = size;<br />&nbsp;&nbsp; for(int i = len; i &gt;= 2; i--) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "首尾未交换时：\n";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j = 1; j &lt;= size; j++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d ", a[j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; swap(a[i], a[1]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; "首尾一次交换结束：\n";<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j = 1; j &lt;= size; j++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%d ", a[j]);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout &lt;&lt; endl;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Heapify(a, 1, len);<br />&nbsp;&nbsp; }<br />}</p>
<p>int main() {<br />&nbsp;&nbsp; int n;<br />&nbsp;&nbsp; scanf("%d", &amp;n);<br />&nbsp;&nbsp; for(int i = 1; i &lt;= n; i++) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scanf("%d", &amp;a[i]);<br />&nbsp;&nbsp; }<br />&nbsp;&nbsp; Heap_sort(a, n);<br />&nbsp;&nbsp; cout &lt;&lt; endl;<br />&nbsp;&nbsp; return 0;<br />}</p>
<p><br />&nbsp;</p>
<p>&nbsp;</p><img src ="http://www.cppblog.com/Achiber/aggbug/190812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Achiber/" target="_blank">王文豪</a> 2012-09-15 22:16 <a href="http://www.cppblog.com/Achiber/archive/2012/09/15/190812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>