插入排序是一种简单直观的排序算法,它的基本思想是将待排序的序列分为已排序区间和未排序区间,每次从未排序区间取出一个元素,插入到已排序区间的合适位置,直到所有元素都被插入到已排序区间为止。下面是使用C语言实现插入排序的代码。
void insertion_sort(int arr[], int n) {
int i, j, key;
for (i = 1; i < n; i++) {
key = arr[i]; // 待插入元素
j = i - 1; // 已排序区间的最后一个元素的下标
// 将待插入元素插入到已排序区间中
while (j >= 0 && arr[j] > key) {
arr[j+1] = arr[j];
j--;
}
arr[j+1] = key; // 将待插入元素插入到合适位置上
}
}
以上代码实现了插入排序的基本框架,下面是具体的实现过程:
1. 从第二个元素开始遍历待排序序列,将每个元素作为待插入元素。
2. 初始化已排序区间的最后一个元素的下标为当前元素的下一个位置。
3. 将待插入元素插入到已排序区间中,直到找到合适的位置。
4. 重复步骤2和3,直到所有元素都被插入到已排序区间中为止。
在实现过程中,需要注意以下几点:
1. 在已排序区间中查找合适位置时,需要从已排序区间的最后一个元素开始向前查找,这样可以保证已排序区间的大小不会增加。
2. 在将待插入元素插入到已排序区间时,需要保证已排序区间的大小不会减少,因此需要将已排序区间的最后一个元素向后移动一位。
3. 在实现过程中,可以使用哨兵来简化代码,即将已排序区间的最后一个元素的下一个位置赋值为-1,这样就可以避免访问空指针的问题。