📅  最后修改于: 2023-12-03 14:58:01.727000             🧑  作者: Mango
插入排序是一种简单而有效的排序算法。它将待排序的元素分为已排序和未排序两个部分,每次将未排序元素插入到已排序部分中的正确位置。递归插入排序是插入排序的一种变体,它使用递归来完成排序操作。
递归插入排序的算法描述如下:
以下是递归插入排序的C程序:
#include <stdio.h>
void rec_insertion_sort(int arr[], int len)
{
if (len <= 1)
{
return;
}
rec_insertion_sort(arr, len - 1);
int last = arr[len - 1];
int j = len - 2;
while (j >= 0 && arr[j] > last)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = last;
}
int main()
{
int arr[] = {3, 1, 4, 2, 5, 7, 6, 8};
int len = sizeof(arr) / sizeof(arr[0]);
rec_insertion_sort(arr, len);
for (int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
rec_insertion_sort
函数中,如果数组长度小于等于1,则直接返回。rec_insertion_sort
函数以对前 len-1 个元素排序。main
函数中,定义一个整型数组 arr
并对其进行赋值。sizeof
和 arr[0]
计算数组的长度,并将数组长度作为参数调用 rec_insertion_sort
函数进行排序。for
循环遍历排序后的数组并将其打印在屏幕上。递归插入排序的时间复杂度为 O(n^2),空间复杂度为 O(n)。和插入排序相比,递归插入排序具有较高的空间复杂度,因为递归调用需要在堆栈中维护额外的信息。但是,递归插入排序和插入排序一样,都是稳定排序算法,适用于小型数据集的排序。