归并排序的核心思想:
如果有两个已经有序的数组
我们可以创建一个新的数组,然后比较大小,将两个有序数组的数据一个一个的拿下来放到新数组中。这样完成之后就是一个有序的数组。
再把值赋给原数组即可完成排序。
关键点:前提是两个有序数组
接下来实现代码框架
void _merge_sort(int* arr,int*tmp,int left,int right)
{
if (left >= right)//递归终止条件
{
return;
}
int mid = (left + right) / 2;
_merge_sort(arr,tmp, left, mid);//要排序的前提是mid左边的已经有序,因此继续递归
_merge_sort(arr,tmp, mid+1, right);//要排序的前提是mid右边已经有序,因此继续递归
//上面是递归版归并排序的思想核心。
//实现两个有序数组结合新生成一个有序数组
int a1 = left;
int a2 = mid + 1;
int i = left;
while (a1 <= mid&&a2 <= right)
{
if (arr[a1] < arr[a2])
{
tmp[i] = arr[a1];
a1++;
}
else
{
tmp[i] = arr[a2];
a2++;
}
i++;
}
while (a1 <= mid)
{
tmp[i] = arr[a1];
i++;
a1++;
}
while (a2 <= right)
{
tmp[i] =