插入排序的平均时间复杂度和最差时间复杂度均为O(n^2)
插入排序是一种原地排序方法
基本思想:
将序列分为“已排序”和“未排序”的左右两部分,每次对“未排序”部分的首元素排序,具体做法是:从“已排序”部分的尾部向头部扫描,找到合适位置将该元素插入(实际代码实现时,寻找插入位置和后移同时进行),“已排序”部分长度加1,“未排序”部分长度减1。初始化状态为:“已排序”部分长度为1(只包含序列的首元素);终止状态为:“已排序”部分长度为N。具体过程如下图所示:

代码:
void process(int a[], int n){
assert(a != NULL);
assert(n > 0);
int i, j;
int tmp;
for(i = 1; i < n; i++){
tmp = a[i]; //保存待插入元素的值,因为后移过程会覆盖该元素
for(j = i-1; a[j] > tmp && j >= 0; j--) //寻找插入位置和后移同时进行
a[j+1] = a[j];
a[j+1] = tmp; //插入
}
}

本文详细介绍了插入排序的基本思想、时间复杂度及其实现代码。插入排序是一种简单的原地排序算法,通过不断将未排序部分的第一个元素插入到已排序部分的适当位置来逐步完成整个序列的排序。
438

被折叠的 条评论
为什么被折叠?



