69,371
社区成员
发帖
与我相关
我的任务
分享
# include <stdio.h>
void Merger(int * s1, int * s2, int low, int mid, int high)
{
int i = low, j = mid + 1, k = 0;
while (i <= mid && j <= high)
{
if (s1[i] > s1[j])
s2[k++] = s1[j++];
else
s2[k++] = s1[i++];
}
while (i <= mid)
s2[k++] = s1[i++];
while (j <= high)
s2[k++] = s1[j++];
}
void Msort(int * s, int * p, int low, int high)
{
int sf[10];
int mid;
if (low == high)
p[low] = s[low];
else
{
mid = (low + high) / 2;
Msort(s, sf, low, mid); //递归的将s[low...mid]归并为sf[low....mid],sf是个中间变量
Msort(s, sf, mid + 1, high);
Merger(sf, p, low, mid, high);
}
}
int main()
{
int s[10] = { 10, 2, 3, 1, 6, 5, 8, 9, 7, 4 };
int sf[10], i;
Msort(s, sf, 0, 9);
for (i = 0; i < 10; i++)
printf("%d\n", sf[i]);
getchar();
getchar();
return 0;
}