64,685
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
#include<stdlib.h>
#define N 50
typedef int ArryType[N];
ArryType L,TR1,SR;
//static c[N];
void Merge(int c[],int b[],int i,int m,int n)
{//将有序的c[i,,m]和c[m+1,,n]归并为有序的
int j,k;
for(j=m+1,k=i;i<=m&&j<=n;++k)
{
if(c[i]<c[j]) b[k]=c[i++];
else b[k]=c[j++];
}
while(i<=m)
{
b[k++]=c[i++];
}
while(j<=n)
{
b[k++]=c[j++];
}
return ;
}
void MSort(int a[],int b[],int s,int t)
{
int c[N];
int m;
if(s=t) b[s]=a[s];
else
{
m=(s+t)/2;
MSort(a,c,s,m);
MSort(a,c,m+1,t);
Merge(c,b,s,m,t);
}
return ;
}
void MergeSort(int a[],int b[],int n)
{
MSort(a,b,1,n);
return ;
}
int main(void)
{
int n,i,a[N],b[N];
//static b[N];
printf("请输入你要排序的元素个数n=");
scanf("%d",&n);
//for(i=1;i<=n;i++)
// printf("%5d",b[i]);
printf("请输入你要排序的元素:\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("经过排序之后的元素为:\n");
MergeSort(a,b,n);
for(i=1;i<=n;i++)
printf("%5d",b[i]);
return 0;
}
void merge(BYTE *array, int low, int mid, int high)
{
int i, k;
BYTE *temp = (BYTE *) malloc(high-low+1);
int begin1 = low;
int end1 = mid;
int begin2 = mid + 1;
int end2 = high;
for (k = 0; begin1 <= end1 && begin2 <= end2; ++k)
if(array[begin1]<array[begin2])
temp[k] = array[begin1++];
else
temp[k] = array[begin2++];
while(begin1<=end1)
temp[k++] = array[begin1++];
while(begin2<=end2)
temp[k++] = array[begin2++];
for (i = 0; i < (high-low+1); i++)
array[low+i] = temp[i];
free(temp);
}
void merge_sort(BYTE *array, UINT first, UINT last)
{
UINT mid,i;
for(mid=1; mid<=last-first; mid += mid)
for(i=first; i<=last-mid; i+=mid+mid)
merge(array,i,i+mid-1,min(i+mid+mid-1,last));
}
void MergeSort(BYTE *array, UINT length)
{
merge_sort(array,0,length-1);
}
void merge(BYTE *array, int low, int mid, int high)
{
int i, k;
BYTE *temp = (BYTE *) malloc(high-low+1);
int begin1 = low;
int end1 = mid;
int begin2 = mid + 1;
int end2 = high;
for (k = 0; begin1 <= end1 && begin2 <= end2; ++k)
if(array[begin1]<array[begin2])
temp[k] = array[begin1++];
else
temp[k] = array[begin2++];
while(begin1<=end1)
temp[k++] = array[begin1++];
while(begin2<=end2)
temp[k++] = array[begin2++];
for (i = 0; i < (high-low+1); i++)
array[low+i] = temp[i];
free(temp);
}
void merge_sort(BYTE *array, UINT first, UINT last)
{
int mid = 0;
if(first<last)
{
mid = (first+last)/2;
merge_sort(array, first, mid);
merge_sort(array, mid+1,last);
merge(array,first,mid,last);
}
}
void MergeSort(BYTE *array, UINT length)
{
merge_sort(array,0,length-1);
}
#include<stdio.h>
#include<stdlib.h>
#define N 50
typedef int ArrType[N];
void Merge(ArrType SR,ArrType &TR,int i,int m,int n)
{
int j,k;
k=i;
for(j=m+1;i<=m&&j<=n;k++)
if(SR[i]<=SR[j]) TR[k]=SR[i++];
else TR[k]=SR[j++];
while(i<=m) TR[k++]=SR[i++];
while(j<=n) TR[k++]=SR[j++];
}
void MSort(ArrType SR,ArrType & TR1,int s,int t)
{
ArrType TR2;
int m;
if(s==t) TR1[s]=SR[s];
else
{
m=(s+t)/2;
MSort(SR,TR2,s,m);
MSort(SR,TR2,m+1,t);
Merge(TR2,TR1,s,m,t);//
}
}
void MergeSort(ArrType &L,int n)
{
MSort(L,L,1,n);
return ;
}
int main(void)
{
int n,i,j;
ArrType L;
printf("请输入你要排序的元素个数n=");
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&L[i]);
MergeSort(L,n);
for(i=1;i<=n;i++)
printf("%6d",L[i]);
return 0;
}