void Merge(int *nums,int left,int mid,int right)
{
int n1=mid-left+1;
int n2=right-mid;
int *nums1=(int *)malloc(sizeof(int )*n1);
int *nums2=(int *)malloc(sizeof(int )*n2);
for(int i=0;i<n1;i++)
{
nums1[i]=nums[left+i];
}
for(int i=0;i<n2;i++)
{
nums2[i]=nums[mid+1+i];
}
int i=0;
int j=0;
int k=left;
while(i!=n1&&j!=n2)
{
if(nums1[i]<nums2[j])
{
nums[k++]=nums1[i++];
}
else
{
nums[k++]=nums2[j++];
}
}
while(i!=n1)
{
nums[k++]=nums1[i++];
}
while(j!=n2)
{
nums[k++]=nums2[j++];
}
free(nums1);
free(nums2);
}
void MergeSort(int *nums,int left,int right)
{
if(left>=right)
{
return;
}
int mid=(right+left)/2;
MergeSort(nums,left,mid);
MergeSort(nums,mid+1,right);
Merge(nums,left,mid,right);
}归并排序
最新推荐文章于 2024-04-28 12:18:26 发布
本文详细介绍了归并排序算法的实现过程,通过递归将数组分成小部分进行排序,然后合并已排序的部分。具体展示了如何使用 C 语言来实现归并排序,并提供了完整的代码示例。
1828

被折叠的 条评论
为什么被折叠?



