博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法总结(一)插入排序【Insertion Sort】
阅读量:5883 次
发布时间:2019-06-19

本文共 1305 字,大约阅读时间需要 4 分钟。

最近在忙着找工作,以前看的排序算法都忘记了,悲剧啦T  T现在来回顾一下吧。

这边推荐一个算法可视化的网站,非常有用。http://visualgo.net/

 

一.插入排序的思想(Wikipedia):

  它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

  1. 从第一个元素开始,该元素可以认为已经被排序
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置
  4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
  5. 将新元素插入到该位置后
  6. 重复步骤2~5

Tips:如果比较操作的代价比交换操作大的话,可以采用二分查找来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找插入排序。

 

二:过程

原始数据

如下图所示,第一个数设为已排序完成的数,此时将需要排序的数往前进行比较,如果已排序的数(11)大于改元素(5),则将已排序的数后移一位(11),直到找到比自己(5)小的数或则到达数组的头部。

 

 

重复上述过程

三.代码

#include 
#include
using namespace std;template
void InsertionSort( vector
&nums){ for( int i = 1; i < nums.size(); i++ ){ T temp = nums[i]; int j; for( j = i-1; j >= 0 && nums[j] > temp; j-- ){ nums[j+1] = nums[j]; //对应3 } nums[j+1] = temp; //4.5 }}int main(){ vector
nums{11,5,29,1,34,4,12,24,40,5,35,17}; cout<<" Before Sort:" ; for( auto m: nums){ cout << m <<" "; } cout<

四.总结

1.首先插入排序是一种稳定的排序

2.对于最好的情况,即原数据是已排序的,则插入排序一共只需要进行n-1次的比较操作

3.对于最坏的情况,即数据是降序的,在这种情况下,一共需要进行1+2+3....(n-1)即n(n-1)/2次比较操作和n(n-1)/2 + (n-1)次赋值操作,所以总的时间复杂度是O(n2)

4.在C++的STL中,插入排序作为快排的补充,用于少量元素的排序,通常为8个或以下。

转载于:https://www.cnblogs.com/rockwall/p/5740702.html

你可能感兴趣的文章
SIFT算法详解(转)
查看>>
[Android Pro] Android Fragment getActivity返回null解决
查看>>
ffmpeg抓屏输出的设置
查看>>
u-boot TFTP: &#39;Access violation&#39; (2)
查看>>
JavaScript权威设计--跨域,XMLHttpRequest(简要学习笔记十九)
查看>>
jquery的load和get的区别
查看>>
iOS开发:XCTest单元测试(附上一个单例的测试代码)
查看>>
2.4.1 用NPOI操作EXCEL关于HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2)的参数
查看>>
Grunt 之 RequireJS
查看>>
Java设计模式9:代理模式
查看>>
vim ctl+v批量添加/删除
查看>>
理解Angular中的$apply()以及$digest()
查看>>
BIEE 维表
查看>>
WritePrivateProfileString GetPrivateProfileString 读取写 配置文件
查看>>
Window 分布式 学习2----好文收藏
查看>>
安卓图表引擎AChartEngine(五) - Dataset和Render参数介绍
查看>>
代码分析工具推荐Understand
查看>>
PHP中全局变量的使用global和$GLOBALS[]
查看>>
一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10 http://www.jb51.net/css/383986.html
查看>>
消息中间件选型
查看>>