1、一、插入排序,顾名思义,每次插入都遍历一次有序数列,找到新插入元素的位置,将其放入数列中即可。
![C语言排序算法:[2]教你理解插入排序。](https://exp-picture.cdn.bcebos.com/bd72f23834bb19efec0d00a0497bd28287893aea.jpg)
2、二、在插入排序中,我们假定给的无序数列为int a[6]={5,2,4,6,1,3}.
![C语言排序算法:[2]教你理解插入排序。](https://exp-picture.cdn.bcebos.com/c33acc828689a146e3e3e24df4bd4c7c35b334ea.jpg)
3、三、算法的基本执行步骤1:第一个元素我们认为是有序的,因此选取第二个元素开始进行插入排序。
4、三、算法的基本执行步骤2:在已排序的(已有序)的元素中,从后向前扫描数列。
5、三、算法的基本执行步铿溘老呻骤3:若该元素(已排序的元素)大于1中取出的元素且已排序元素还未扫描完,则将该元素向后移一位。
6、三、算法的基本执行步骤4:直到找到取出元素的位置。
7、三、算法的基本执行步骤5:重复2至4的步骤,直到数列中的数字被全部遍历。
![C语言排序算法:[2]教你理解插入排序。](https://exp-picture.cdn.bcebos.com/7efc527c34b33c4169e8dff5887de137c8762eea.jpg)
8、四、具体实现代码如下:
![C语言排序算法:[2]教你理解插入排序。](https://exp-picture.cdn.bcebos.com/023cff37c97622bc1d97c3d3a05fd546049628ea.jpg)
9、五、运行效果如下:总共执行了5次插入排序。
![C语言排序算法:[2]教你理解插入排序。](https://exp-picture.cdn.bcebos.com/d4071b96b814f4d0d251c466cdfe474ec38323ea.jpg)
10、六、效率分析,在最坏的情况下(数列逆序),比较次数和移动次数最多为n*n(-1)/2
![C语言排序算法:[2]教你理解插入排序。](https://exp-picture.cdn.bcebos.com/c3c22dbf3bef354f3feab88a23db574afb321bea.jpg)