#include"Sort.h"
// 两个有序数组归并
void Merge(int *array,int leftStart,int leftEnd,int rightStart,int rightEnd)
{
int l=leftStart;
int r=rightStart;
// 得到临时数组的长度
int size=rightEnd-l+1;
// 定义一个临时的数组,大小为size
int tempA[size];
// 临时数组的位置标记
int tp=0;
// 开始合并
while(l<=leftEnd && r<= rightEnd)
{
// 如果array【l】比array【r】小
if(array[l]<array[r])
{
// 就把array的值存入tempA【tp】
tempA[tp]=array[l];
// 指向下一个元素
tp++;
l++;
}else
{
// 否则就把array【r】的元素给tempA【tp】
tempA[tp]=array[r];
// 指向下一个元素
tp++;
r++;
}
}
// 如果l没到末尾
while(l<=leftEnd)
{
// 就把剩下的元素给到tempA数组
tempA[tp]=array[l];
tp++;
l++;
}
// 如果r没到末尾
while(r<=rightEnd)
{
// 就把剩下的给到tempA数组
tempA[tp]=array[r];
tp++;
r++;
}
// 把tempA数组中的元素放到array里面
for(l=leftStart,tp=0;l<=rightEnd;l++,tp++)
{
array[l]=tempA[tp];
}
}
void Msort(int *array,int left,int leftEnd,int right,int rightEnd)
{
int middle;
// left始终是在right的左边
if(left<rightEnd)
{
// 左边
middle=(left+leftEnd)/2;
Msort(array,left,middle,middle+1,leftEnd);
// 右边
middle=(right+rightEnd)/2;
Msort(array,right,middle,middle+1,rightEnd);
// 合并
Merge(array,left,leftEnd,right,rightEnd);
}
}
void MergeSort(int *array,int size)
{
// 确定好数组的边界
int left=0;
int right=size-1;
// 开始排序
// 得到中间的位置
int middle=(left+right)/2;
Msort(array,left,middle,middle+1,right);
}
C语言归并排序
于 2022-08-17 16:13:44 首次发布
本文详细介绍了如何使用C++实现归并排序算法,涉及两个有序数组的合并操作,通过递归和临时数组来优化排序过程。重点讲解了Merge函数和Msort函数的工作原理,以及整个MergeSort函数的调用过程。
摘要由CSDN通过智能技术生成