﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-天涯学子</title><link>http://www.cppblog.com/cuckoo03/</link><description>天道酬勤</description><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 20:06:27 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 20:06:27 GMT</pubDate><ttl>60</ttl><item><title>C语言编写--Merge Sort</title><link>http://www.cppblog.com/cuckoo03/archive/2009/04/07/79183.html</link><dc:creator>cuckoo</dc:creator><author>cuckoo</author><pubDate>Tue, 07 Apr 2009 07:23:00 GMT</pubDate><guid>http://www.cppblog.com/cuckoo03/archive/2009/04/07/79183.html</guid><wfw:comment>http://www.cppblog.com/cuckoo03/comments/79183.html</wfw:comment><comments>http://www.cppblog.com/cuckoo03/archive/2009/04/07/79183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/cuckoo03/comments/commentRss/79183.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/cuckoo03/services/trackbacks/79183.html</trackback:ping><description><![CDATA[<p>#include &lt;stdio.h&gt;<br>#include &lt;math.h&gt;<br>#include &lt;stdlib.h&gt;<br>#define N 10000</p>
<p>void merge(int A[],int p,int q,int r){<br>&nbsp; int n1=q-p+1;<br>&nbsp; int n2=r-q;<br>&nbsp; int i,j,k;<br>&nbsp; int* L;<br>&nbsp; int* R;<br>&nbsp; L=(int*)malloc(sizeof(int)*(n1+1));<br>&nbsp; R=(int*)malloc(sizeof(int)*(n2+1));</p>
<p>/*&nbsp; int *L=new int[n1+1];<br>&nbsp; int *R=new int[n2+1];<br>*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*此为C++语言，等价于上面的malloc*/<br>&nbsp; for(i=0;i&lt;n1;i++)<br>&nbsp;&nbsp;&nbsp; L[i]=A[p+i];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*数组A[p...q]对应于数组L[0...n1-1]*/<br>&nbsp; for(j=0;j&lt;n2;j++)<br>&nbsp;&nbsp;&nbsp; R[j]=A[q+j+1];&nbsp;&nbsp;&nbsp;&nbsp; /*数组A[q+1...r]对应于数组R[0...n2-1]*/<br>&nbsp; L[n1]=N;<br>&nbsp; R[n2]=N;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*设置两个大数，称为哨兵牌，用于简化代码，一旦发生两张哨兵牌<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时出现的情况是，说明两堆牌中的所有非哨兵牌都放到了堆中去了<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp; i=0;<br>&nbsp; j=0;<br>&nbsp; for(k=p;k&lt;=r;k++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; if(L[i]&lt;=R[j])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A[k]=L[i];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; else{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A[k]=R[j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; j++;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; }<br>}</p>
<p><br>void merge_sort(int A[],int p,int r)<br>{<br>&nbsp; int q;<br>&nbsp; if(p&lt;r)<br>&nbsp; {<br>&nbsp; /*q=(int)((p+r)/2);&nbsp;&nbsp; 下取整可用floor()，上取整可用ceil()，包含在math.h中*/<br>&nbsp; q=floor((float)(p+r)/2.0);<br>&nbsp; merge_sort(A,p,q);<br>&nbsp; merge_sort(A,q+1,r);<br>&nbsp; merge(A,p,q,r);<br>&nbsp; }<br>}</p>
<p>/*<br>void main()<br>{<br>&nbsp;&nbsp; int a[10]={12,78,20,24,158,50,58,621,1475,2};<br>&nbsp;&nbsp; int i;<br>&nbsp;&nbsp; printf("排序前数组序列：\n");<br>&nbsp;&nbsp; for(i=0;i&lt;10;i++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%5d",a[i]);<br>&nbsp;&nbsp; }&nbsp; <br>&nbsp;&nbsp; printf("\n排序前数组序列：\n");<br>&nbsp;&nbsp; merge_sort(a,0,9);<br>&nbsp;&nbsp; for(i=0;i&lt;10;i++)<br>&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("%5d",a[i]);<br>&nbsp;&nbsp; }<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; getchar();<br>&nbsp;&nbsp; <br>}<br>*/<br>&nbsp; void main(){<br>&nbsp; int* B;<br>&nbsp; int a;<br>&nbsp; int n;<br>&nbsp; scanf("%d",&amp;n);<br>&nbsp; if(NULL==(B=(int*)malloc(sizeof(int)*n)))<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; printf("memory error!\n");<br>&nbsp;&nbsp;&nbsp; exit(1);<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; for(a=0;a&lt;n;a++)<br>&nbsp;&nbsp;&nbsp; scanf("%d",&amp;B[a]);<br>&nbsp; merge_sort(B,0,n-1);<br>&nbsp; for(a=0;a&lt;n;a++)<br>&nbsp;&nbsp;&nbsp; printf("%6d",B[a]);<br>&nbsp; getchar();<br>&nbsp; getchar();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*用于完成计算后等待查看结果，输入一个数结束程序，退出显示页面*/<br>}</p>
<img src ="http://www.cppblog.com/cuckoo03/aggbug/79183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/cuckoo03/" target="_blank">cuckoo</a> 2009-04-07 15:23 <a href="http://www.cppblog.com/cuckoo03/archive/2009/04/07/79183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>