先将一个数组分解成多个小数组,每个小数组进行排序操作,最后合并数组,形成排好序的数组
void merge(int* a,int left,int right,int mid)
{
int n1 = mid - left;
int n2 = right - mid;
for(int i = 0;i < n1;i++)
{
L[i] = a[left + i];
}
for(int i = 0;i < n2;i++)
{
R[i] = a[mid + i];
}
int i = j = 0;
for(int k = left;k < right;k++) //进行排序操作
{
if(L[i] <= R[i])
{
a[k] = L[i++];
}
else
{
a[k] = R[k++];
}
}
}
void mergeSort(int* a;int left,int right)
{
if(left + 1 < right)
{
int mid = (left + right)/2;
mergeSort(a,left,mid); //使用递归操作,分解数组,再排序
mergeSort(a,mid,right);
merge(a,left,right,mid);
}
}