插入排序
代码
C语言代码:
#include <stdio.h>
void insertion_sort(int arr[], int n) {
int i, j, key;
for (i = 2; i <= n; i++) { // 从第二个元素开始
key = arr[i];
for (j = i - 1; arr[j] > key; j--) {
arr[j + 1] = arr[j];
}
arr[j + 1] = key;
}
}
int main() {
int arr[] = {-1000000, 12, 11, 13, 5, 6}; // 使用一个非常小的值作为哨兵,第一个元素不会被排序
int n = sizeof(arr)/sizeof(arr[0]) - 1; // 计算有效长度(去掉哨兵)
insertion_sort(arr, n);
printf("Sorted array: ");
for (int i = 1; i <= n; i++) { // 从第一个实际元素开始打印
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
代码解释
- 初始化:数组
arr的第一个元素-1000000作为哨兵,用于边界检查。排序部分从第二个元素开始。 - 主排序循环:
- 从第二个元素(即下标为2)开始遍历,每次将当前元素存入
key。 - 内部
for循环从当前元素的前一个位置开始向前遍历,如果当前元素比key大,则将其向后移动一位,直到找到合适位置插入key。
- 从第二个元素(即下标为2)开始遍历,每次将当前元素存入
- 结果输出:排序完成后,输出排序后的数组,忽略第一个哨兵元素。