1. 概念
将当前元素插入到已经有序的数组中适当的位置。
2. 实现流程
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5
3.算法图解
插入排序 插入排序4.代码实现
void insertion_sort(int arr[],int len) {
int i,j;
int temp;
for (i = 0 ; i < len ; i ++) {
temp = arr[i];
for (j = i - 1; j >= 0 && arr[j] > temp; j--) {
arr[j+1] = arr[j];
}
arr[j+1] = temp;
}
}
5.时间复杂度
最差时间复杂度 O( n^2 )
最优时间复杂度 O( n )
平均时间复杂度 O( n^2 )
最差空间复杂度 O( n ),需要辅助空间O(1)
如果原始序列是I的,插入排序的效果是非常好的。
网友评论