数据结构 排序 归并排序

头文件:

#defineMAXSIZE20

#defineEQ(a,b)((a)==(b))
#defineLT(a,b)((a)<(b))
#defineLQ(a,b)((a)<=(b))

typedef
intKeyType;

typedef
intInfoType;

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

typedef
struct...{
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
Pressanykeyto
continue

说明:

算法的复杂度为O(n * log(n)),是一种稳定的排序方法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值