Merge函数的实现
以下是c语言实现的源码
merge函数是归并排序的工具函数,很重要。数组下标的加加减减要小心。
void merge(int arr[], int p, int q, int r)
{
int n1 = q - p + 1; //左数组的size 4
int n2 = r - q; //右数组的size 6
int left[n1];
int right[n2];
//复制到新数组
for (int i = 0; i < n1; i++)
{
left[i] = arr[i + p - 1];
}
for (int j = 0; j < n2; j++)
{
right[j] = arr[j + q];
}
int i = 0;
int j = 0;
int k = p - 1;
while (i != n1 && j != n2)
{
if (left[i] < right[j])
{
arr[k] = left[i];
i++;
}
else
{
arr[k] = right[j];
j++;
}
k++;
}
if (i == n1)
{
while (j < n2)
{
arr[k] = right[j];
j++;
k++;
}
}
else
{
while (i < n1)
{
arr[k] = left[i];
i++;
k++;
}
}
}
网友评论