利用递归进行对算法的优化十分常见,那么我们该如何对排序进行优化呢?
首先,我们对递归应有图形形象的理解,树结构通常便是递归形成,于是我们在理解或是书写递归时,可以想象树不断向下扎根分叉。
然后我在下面展示归并排序的算法模板:
void m(int q[], int l, int r)
{
if (l >= r) return; //递归必备的终末状态
int mid = l + r >> 1;
m(q, l, mid), m(q, mid + 1, r);
int k = 0, i = l, j = mid + 1;
while (i <= mid && j <= r)
if (q[i] <= q[j])
tmp[k ++ ] = q[i ++ ];
else
tmp[k ++ ] = q[j ++ ];
while (i <= mid) tmp[k ++ ] = q[i ++ ];
while (j <= r) tmp[k ++ ] = q[j ++ ];
for (i = l, j = 0; i <= r; i ++, j ++ )
q[i] = tmp[j];
}