插入排序
时间复杂度\(\mathrm{O}(n^2)\)
算法的思路如图所示
将待排序部分分成两个片段,有序片段和待排序片段,每次从待排序片段取一个数,与有序片段进行比较后放入合适位置
代码实现
void insertSort(int *a, size_t size) {
int i, j;
for (i = 2; i < size; ++i) {
if (a[i] < a[i - 1]) {
a[0] = a[i];
//这个for循环就是有序序列与待排序元素的比较
for (j = i - 1; a[j] > a[0]; --j)
a[j + 1] = a[j];//如果条件不满足,有序元素会不断的向后移位
a[j + 1] = a[0];//最后将待排序元素放在正确位置
}
}
}
这里使用的方法是《大话数据结构》中的实现,将a[0]设置为哨兵,如果有逆序,先将元素放入哨兵,然后与有序片段进行比较,将其插入合适位置