插入排序的递归版本的实现,它的主要思想还是分治法,根据分解解决合并的原则,先把问题分解,先递归的排序A[1…n-1],然后再将A[n]插入到已排序的数组中,依次递归下去,最后的数组就是已经排好序的。
1.首先实现解决将A[n]插入到数组A[1…n-1]当中:
这里和插入排序的处理一样,依次和前面的数据比较,直到碰到小于它的数据停止。
void merge(int* t, int n) {
int k = t[n];
int i = n - 1;
while (i >= 0 && t[i] > k)
{
t[i + 1] = t[i];
--i;
}
t[i + 1] = k;
}
2.然后递归整个数组:
当递归到0时,则递归结束。
void mergeSort(int* t, int n) {
if (--n >= 0)
{
mergeSort(t, n);
merge(t, n);
}
}
3.最后排序输出结果:
void print(int* t, int length)
{
for (int i = 0; i < length; ++i)
{
printf("%d ", t[i]);
}
printf("\n");
}
int main() {
int a[10] = { 10, 1, 9, 3, 5, 8, 2, 6, 4, 7 };
int length = sizeof(a) / sizeof(a[0]);
print(a, length);
mergeSort(a, length);
print(a, length);
return 0;
}
![insertion-sort-recursion-result](https://img-blog.csdnimg.cn/img_convert/ffe83904f19ae88fd34482ae630b04da.png)
递归插入排序的实现结果
[download id=”1022″ template=”button”]