📅  最后修改于: 2023-12-03 15:21:02.636000             🧑  作者: Mango
插入排序是经典的排序算法之一,适用于各种大小的数据集合,在小数据集上表现优异。
插入排序的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。其具体实现过程如下:
通常采用以下方式实现:
void InsertionSort(int *a, int n) {
int i, j, x;
for (i = 1; i < n; i++) {
x = a[i];
j = i - 1;
while (j >= 0 && a[j] > x) {
a[j + 1] = a[j];
j = j - 1;
}
a[j + 1] = x;
}
}
算法的时间复杂度为 O(n^2),在最坏情况下需要进行 O(n^2) 次比较和 O(n^2) 次移动。但是,在实际应用中,由于它的简单性、优美性以及较快的排序速度,在小数据集上表现优异,故在应用中仍具有重要地位。
以下是对数组 {5, 3, 6, 2, 7, 1, 0, 9, 8, 4}
进行插入排序的过程演示:
Initial array: 5 3 6 2 7 1 0 9 8 4
i = 1: 3 5 6 2 7 1 0 9 8 4
i = 2: 2 3 5 6 7 1 0 9 8 4
i = 3: 2 3 5 6 7 1 0 9 8 4
i = 4: 2 3 5 6 7 1 0 9 8 4
i = 5: 1 2 3 5 6 7 0 9 8 4
i = 6: 0 1 2 3 5 6 7 9 8 4
i = 7: 0 1 2 3 5 6 7 9 8 4
i = 8: 0 1 2 3 5 6 7 9 9 4
i = 9: 0 1 2 3 4 5 6 7 9 9
最后的排序结果为 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
,证明了算法的正确性。