排序算法_插入排序
一、算法描述
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,在已经排序的元素序列中从后向前扫描
- 如果该元素(已排序)大于新元素,将该元素移到下一位置
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
- 将新元素插入到该位置后
- 重复步骤2~5
二、图示
三、性能描述
数据结构 :数组
最差时间复杂度 :O(n2)
最优时间复杂度 :O(n)
平均时间复杂度 :O(n2)
最差空间复杂度 :总共O(n) ,需要辅助空间O(1)
四、总结
插入排序不适合对于数据量比较大的排序应用。但是,如果需要排序的数据量很小,例如,量级小于千,那么插入排序还是一个不错的选择。
五、C语言实现代码
View Code
1 void insertion_sort(char array[], int first, int last) 2 { 3 int i,j; 4 int temp; 5 for (i = first+1; i<=last;i++) 6 { 7 temp = array[i]; 8 j=i-1; 9 10 //與已排序的數逐一比較,大於temp時,該數向後移 11 while((j>=first) && (array[j] > temp)) //当first=0,j循环到-1时,由于[[短路求值]],不会运算array[-1] 12 { 13 array[j+1] = array[j]; 14 j--; 15 } 16 array[j+1] = temp; //被排序数放到正确的位置 17 18 } 19 }
参考文档: