头文件:
#defineMAXSIZE20
#defineEQ(a,b)((a)==(b))
#defineLT(a,b)((a)<(b))
#defineLQ(a,b)((a)<=(b))
typedefintKeyType;
typedefintInfoType;

typedefstruct...{
KeyTypekey;
InfoTypeotherinfo;
}RedType;

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

voidinit(SqList&s,intw[],intn)...{
s.length=n;
for(inti=1;i<=n;i++)...{
s.r[i].key=w[i-1];
}
}

voidshow(SqLists)...{
for(inti=1;i<=s.length;i++)...{
printf("%d ",s.r[i]);
}
printf(" ");
}
//mergethesr[i...m]andsr[m+1...n]totr[i...n].
voidmerge(RedTypesr[],RedTypetr[],inti,intm,intn)...{
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.
voidmSort(RedTypesr[],RedTypetr[],ints,intt)...{
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);
}
}

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

voidmain()...{
intw[]=...{49,38,65,97,76,13,27,49};
intn=8;
SqLists;
init(s,w,n);
mergeSort(s);
printf("aftermergesort: ");
show(s);
}
程序运行结果:
aftermergesort:
1327384949657697
Pressanykeytocontinue
说明:
算法的复杂度为O(n * log(n)),是一种稳定的排序方法。

被折叠的 条评论
为什么被折叠?



