归并排序循环理解问题

循环里(i<=N-2*length)我知道意思是表示把前面的偶数队列排在一起,留下后面两个再判断,但是就是理解不了为啥,还有后面那个判断留下几个子列的判断,也都理不清

void Msortfor (ElementType A[], ElementType TmpA[], int N, int length) {
int i,j;
for (i = 0; i <= N - 2 * length; i += 2 * length) {
Merge1(A, TmpA, i, i + length, i + 2 * length - 1);
}
if (i + length < N)
Merge(A, TmpA, i, i + length, N - 1);
else
for (j = i; j < N; j++)
TmpA[j] = A[j];
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^