C语言插入排序的具体实现
插入排序是一种简单直观的排序算法,其工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。下面是插入排序在C语言中的具体实现:
#include <stdio.h>
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i]; // 取出未排序序列中的第一个元素
int j = i - 1;
// 将已排序序列中大于key的元素向后移动一个位置
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key; // 将key插入到正确位置
}
}
void printArray(int arr[], int n) {
for (int 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]);
printf("Original array: \n");
printArray(arr, n);
insertionSort(arr, n);
printf("Sorted array: \n");
printArray(arr, n);
return 0;
}
代码说明:
insertionSort函数:
- 通过循环遍历每一元素,从第二个元素开始。
- 使用
key
来保存当前待插入的元素。 - 内嵌的
while
循环将已经排序的序列中比key
大的元素向后移动一位。 - 将
key
放到正确的位置。
printArray函数:
- 用于输出数组,每个元素后跟一个空格。
main函数:
- 初始化一个数组并输出其原始顺序。
- 调用
insertionSort
函数对数组进行排序。 - 再次输出数组,显示排序后的结果。
这个实现展示了插入排序算法的基础构造,适合用于小规模数据集的排序任务。在大多数情况下,插入排序的时间复杂度为O(n^2)。