Merge函數(shù)的實(shí)現(xiàn)
以下是c語言實(shí)現(xiàn)的源碼
merge函數(shù)是歸并排序的工具函數(shù),很重要。數(shù)組下標(biāo)的加加減減要小心。
void merge(int arr[], int p, int q, int r)
{
int n1 = q - p + 1; //左數(shù)組的size 4
int n2 = r - q; //右數(shù)組的size 6
int left[n1];
int right[n2];
//復(fù)制到新數(shù)組
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++;
}
}
}
然后是數(shù)學(xué)歸納法證明題:
IMG_0034.JPG