📅  最后修改于: 2023-12-03 15:25:58.207000             🧑  作者: Mango
插入排序是一种简单的排序算法,它的基本思想是将一个数据插入到已排好序的有序数据中,从而得到一个新的、个数加一的有序数据。插入排序分为直接插入排序和希尔排序两种,而本文将介绍的是直接插入排序。
直接插入排序的过程类似于打扑克牌,每次将一张牌插入到手中已经排好序的牌中。具体实现时,将第一个元素看作一个有序序列,依次将后面的元素插入到这个序列中。
下面是直接插入排序的C程序实现,代码中使用了一个辅助变量temp,用于保存当前需要排序的元素,i用于循环控制,j表示当前比较的元素位置,从头开始比较,直到找到第一个大于temp的元素,然后将temp插入到该元素之前。
void insertion_sort(int arr[], int len)
{
for(int i = 1; i < len; i++)
{
int temp = arr[i];
int j = i - 1;
while(j >= 0 && arr[j] > temp)
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = temp;
}
}
下面是使用示例,首先定义一个数组作为排序的对象,然后使用函数进行排序。
#include <stdio.h>
void insertion_sort(int arr[], int len);
int main()
{
int arr[] = {3, 6, 4, 2, 11, 8, 9};
int len = sizeof(arr) / sizeof(int);
insertion_sort(arr, len);
for(int i = 0; i < len; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
输出结果为:2 3 4 6 8 9 11。
通过本文的介绍,我们了解了直接插入排序的基本思想和C语言实现方法,并使用示例进行了演示。插入排序是一个简单、易于实现的排序算法,适用于小规模数据的排序,但是对于大规模数据,由于其时间复杂度为O(n²),效率比较低,通常不作为重要的排序算法使用。