排序算法之插入排序
来源:互联网 发布:数据库包含的完整性 编辑:程序博客网 时间:2024/04/29 04:07
同样的先上这张图
下面分析插入排序:
插入排序每次取一个元素插入到已排好序的序列中。
由于前面的序列已经排好序,我们只需要从这个序列的后面开始查找,找到第一个大于待插入元素的位置,将该位置后面的元素全部往后移一个位置,并把待排元素插入到该位置之后。
插入排序外层循环选择待排元素,时间复杂度为O(n),内层循环找插入位置,最好情况是直接插入到最后,时间复杂度为O(1),最坏情况可能是插入到开头,时间复杂度为O(n),所以插入排序最好情况时间复杂度为O(n),平均情况和最坏情况时间复杂度为O(n2)。
插入排序不需要额外的辅助空间,空间复杂度为O(1)。
如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面,所以插入排序是稳定的。
AS3代码:
/** * 插入排序 * 外层循环选择待插入元素 * 内层循环查找插入位置并将该位置后面元素后移 */private function InsertSort(arr:Array):void{var x:Number,j:Number;//外层循环从1到n-1,选择待插入元素for(var i:uint=1;i<arr.length;i++){//如果arr[i]>=arr[i-1]直接插入到最后if(arr[i]<arr[i-1]){//复制为哨兵x=arr[i];j=i-1;while(x<arr[j] && j>=0){arr[j+1]=arr[j];j--;}arr[j+1]=x;}}}
c++代码
/** 插入排序* 外层循环遍历待插入元素* 内层循环从已排好序元素中查找插入位置* 最好情况O(n),最坏和平均情况O(n2)* O(1)* 稳定*/template <typename T>void SortHelp<T>::insertSort(T l[], int length) {int temp, j;for (int i = 1; i < length; i++){//查找插入位置的同时将元素往后移j = i - 1;temp = l[i];while (l[j] > temp && j >= 0){l[j + 1] = l[j];j--;}//插入l[j + 1] = temp;}}
总结,插入排序最好时间复杂度为O(n),最坏及平均时间复杂度为O(n2);空间复杂度为O(1),稳定。
1 0
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之 插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 排序算法之插入排序
- 一段错误代码
- java数组的对象化,序列化以及拷贝
- hdu3062 Party--强连通 & 2-sat & 判断可行性
- NSA(美国国安局)泄漏Exploit分析
- 单片机(六)__IIC总线
- 排序算法之插入排序
- SVN Failed to load JavaHL Library.
- 30day plan
- Java NIO Socket VS 标准IO Socket
- 回声抑制器:AEC回声抑制算法
- 数据压缩之不可压缩性
- (转)TCP连接异常断开检测
- iphone移动端click事件延迟300ms解决方案
- JavaScript事件入门