#include <stdio.h>
void merge(int a[],int s,int m,int e,int tmp[])
{
int p=s;
int q=m+1;
int c=0;
while(p<=m&&q<=e)
{
if(a[p]>a[q])
{
tmp[c]=a[q];
q++;
c++;
}
else
{
tmp[c]=a[p];
p++;
c++;
}
}
if(p<=m)
{
for(;p<m+1;p++)
{
tmp[c]=a[p];
c++;
}
}
if(q<=e)
{
for(;q<=e;q++)
{
tmp[c]=a[q];
c++;
}
}
c=0;
for(;s<=e;s++)
{
a[s]=tmp[c];
c++;
}
}
void mergesort(int a[],int s,int e,int tmp[])
{
if(s<e)
{
int m=(s+e)/2;
mergesort(a,s,m,tmp);//递归思想
mergesort(a,m+1,e,tmp);
merge(a,s,m,e,tmp);
}
}
int main()
{
int a[10]={4,5,9,3,1,4,2,6,7,5};
int b[10];
mergesort(a,0,9,b);
for(int i=0;i<10;i++)
{
printf("%d ",a[i]);
}
}
归并排序思考
于 2022-03-14 23:00:04 首次发布