69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
void merger(int * A,int p,int q,int r);
void mergerSort(int * A,int p,int r);
int main()
{
int A[10] = {0};
int i = 0;
for(i = 0;i < 10;i++)
{
scanf("%d",A + i);
}
printf("输入为:\n");
for(i = 0;i < 10;i++)
{
printf("%d",A[i]);
}
mergerSort(A,0,9);
printf("\n排序后:\n");
for(i = 0;i < 10;i++)
{
printf("%d",A[i]);
}
printf("\n");
return 0;
}
void merger(int * A,int p,int q,int r)
{
int n1 = q - p + 1;
int n2 = r - q ;
int i = 0,k = 0,j = 0;
int * L = (int*)malloc(sizeof(int) * n1 + 1);
int * R = (int *)malloc(sizeof(int) * n2 + 1);
for(i = 0;i < n1;i++)
{
L[i] = A[p + i];
}
L[i] = 99999;
for(i = 0;i < n2;i++)
{
R[i] = A[q + i + 1];
}
R[i] = 99999;
i = j = 0;
for(k = p;k <= r;k++)
{
if(L[i] < R[j])
{
A[k] = L[i];
i++;
}
else
{
A[k] = R[j];
j++;
}
}
free(R);
free(L);
}
void mergerSort(int * A,int p,int r)
{
int mid = 0;
if(p < r)
{
mid = (r + p) / 2;
mergerSort(A,p,mid);
mergerSort(A,mid + 1,r);
merger(A,p,mid,r);
}
}
void merger(int * A,int p,int q,int r)
{
int n1 = q - p + 1;
int n2 = r - q ;
int i = 0,k = 0,j = 0;
int * L = (int*)malloc(sizeof(int) * n1 + 1);
int * R = (int *)malloc(sizeof(int) * n2 + 1);
for(i = 0;i < n1;i++)
{
L[i] = A[p + i];
}
//L[i] = 99999;
for(i = 0;i < n2;i++)
{
R[i] = A[q + i + 1];
}
//R[i] = 99999;
i = j = 0;
for(k = p;k <= r;k++)
{
if ((i<n1&&j==n2)||(i<n1&&j<n2&&L[i] < R[j]))
A[k] = L[i++];
else if ((i==n1&&j<n2)||(i<n1&&j<n2&&L[i] >= R[j]))
A[k] = R[j++];
}
free(L);
free(R);
}