69,373
社区成员
发帖
与我相关
我的任务
分享
#include"stdio.h"
#include"stdlib.h"
int *B; // 全局的临时数组
void Merge_Array(int A[], int low, int mid, int high)
{
int i, j, k;
for(k=low; k<=high; ++k)
B[k] = A[k]; // 将A中所有元素复制到B
for(i=low,j=mid+1,k=i; i<=mid&&j<=high; ++k)
{
if(B[i] <= B[j]) // 比较B的左右两段序列中的元素
A[k] = B[i++]; // 将较小值复制到A中
else
A[k] = B[j++];
}
while(i<=mid) A[k++] = B[i++]; // 若第一个表未检测完,复制
while(j<=high) A[k++] = B[j++]; // 若第二个表未检测完,复制
}
void Merge_Sort(int A[], int low, int high)
{
if(low < high)
{
int mid = (low + high)/2;
Merge_Sort(A, low, mid); // 对左侧子序列进行递归排序
Merge_Sort(A, mid+1, high); // 对右侧子序列进行递归排序
Merge_Array(A, low, mid, high); // 归并
}
}
int main()
{
int i;
int A[9] = {1,5,4,3,7,2,6,8,0}; // 待排序数组
B = (int*)malloc(9*sizeof(int)); // 分配空间
/*输出排序前数组*/
printf("The squence of numbers:\n");
for(i=0; i<9; ++i)
printf("%d ", A[i]);
printf("\n");
/*输出排序后数组*/
Merge_Sort(A, 0, 8);
printf("The sorted data is:\n");
for(i=0; i<9; ++i)
printf("%d ", A[i]);
printf("\n");
return 0;
}