📅  最后修改于: 2023-12-03 15:12:22.369000             🧑  作者: Mango
递归插入排序是一种基于插入排序的排序算法,其主要思想是通过递归的方式将待排序序列分解成一个个小序列,然后对这些小序列进行插入排序,最终将它们合并成一个有序的序列。相比于普通的插入排序,递归插入排序的时间复杂度更加稳定,但空间复杂度会略微增加。
以下为递归插入排序的C程序实现:
#include <stdio.h>
void insertionSortRecursive(int arr[], int n)
{
if (n <= 1)
return;
insertionSortRecursive(arr, n-1);
int last = arr[n-1];
int j = n-2;
while (j >= 0 && arr[j] > last)
{
arr[j+1] = arr[j];
j--;
}
arr[j+1] = last;
}
void printArray(int arr[], int n)
{
int i;
for (i=0; i < n; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main()
{
int arr[] = {12, 11, 13, 5, 6};
int n = sizeof(arr)/sizeof(arr[0]);
insertionSortRecursive(arr, n);
printArray(arr, n);
return 0;
}
首先定义了一个insertionSortRecursive
函数,用于递归地进行插入排序。如果传入的序列长度n
小于等于1,则直接返回;否则将前n-1
个元素进行递归排序,然后在已排序的序列中找到新元素的位置,最后将新元素插入到序列中。
定义了一个printArray
函数,用来输出排序后的序列。在主函数中初始化一个待排序序列arr
,然后计算它的长度n
。调用insertionSortRecursive
函数将该序列排序,最后用printArray
函数输出排好序的序列。
以上就是递归插入排序的C程序实现。