头文件:
#define
MAXSIZE20

#define
EQ(a,b)((a)==(b))
#define
LT(a,b)((a)<(b))
#define
LQ(a,b)((a)<=(b))

typedef
int
KeyType;

typedef
int
InfoType;


typedef
struct
...
{
KeyTypekey;
InfoTypeotherinfo;
}
RedType;


typedef
struct
...
{
RedTyper[MAXSIZE+1];
intlength;
}
SqList;
源文件:
#include
"
sort.h
"

#include
"
stdio.h
"


void
init(SqList
&
s,
int
w[],
int
n)
...
{
s.length=n;

for(inti=1;i<=n;i++)...{
s.r[i].key=w[i-1];
}
}


void
show(SqLists)
...
{

for(inti=1;i<=s.length;i++)...{
printf("%d ",s.r[i]);
}
printf(" ");
}

//
mergethesr[i...m]andsr[m+1...n]totr[i...n].

void
merge(RedTypesr[],RedTypetr[],
int
i,
int
m,
int
n)
...
{
intj,k;


for(j=m+1,k=i;i<=m&&j<=n;k++)...{

if(LQ(sr[i].key,sr[j].key))...{
tr[k]=sr[i++];

}else...{
tr[k]=sr[j++];
}
}

//copytheleftofsr[i...m]

if(i<=m)...{

for(intt=0;t<=m-i;t++)...{
tr[k+t]=sr[i+t];
}
}

//copytheleftofsr[m+1...n]

if(j<=n)...{

for(intt=0;t<=n-j;t++)...{
tr[k+t]=sr[j+t];
}
}
}

//
mergesortsrandstoreintr.

void
mSort(RedTypesr[],RedTypetr[],
int
s,
int
t)
...
{

if(s==t)...{
tr[s]=sr[s];

}else...{
intm=(s+t)/2;
RedTypetr2[MAXSIZE+1];

mSort(sr,tr2,s,m);
mSort(sr,tr2,m+1,t);
merge(tr2,tr,s,m,t);
}
}


void
mergeSort(SqList
&
s)
...
{
mSort(s.r,s.r,1,s.length);
}


void
main()
...
{

intw[]=...{49,38,65,97,76,13,27,49};
intn=8;

SqLists;
init(s,w,n);

mergeSort(s);
printf("aftermergesort: ");
show(s);
}
程序运行结果:
aftermergesort:
13
27
38
49
49
65
76
97
Pressanykeyto
continue
说明:
算法的复杂度为O(n * log(n)),是一种稳定的排序方法。