插入排序

一、核心思想:在一个有序的数组中,通过逐一和前面的数进行比较,找到新数的位置。

例子:数组有有一个数21

插入一个3,3<21,因此结果为 3,21

再插入一个34,34>21,因此结果为 3,21,34

再插入一个6,34>6,向前移动,21>6,再向前移动,3<6,因此结果为 3,6,21,34

问题1:对于一个有n个数的数组,需要插入多少次,才能完成插入排序?

N-1次

二、核心代码:

def Insert_Sort(lista):

for i in xrange(1,len(lista)): #用i控制从第二个数字开始到最后一个数字的下标

j = i -1  #用j去控制i前面一个数和i做比较

while j >= 0: #j<0是一种退出循环的判定条件

if lista[j] > lista[j+1]: #如果前数大于后数,就交换位置

lista[j],lista[j+1] = lista[j+1],lista[j]

j -= 1  #j依次减一,去跟前面的值作比较

else:

break  #只要出现一个j>j+1,交换后就跳出本次循环即可

return lista

if __name__ == '__main__':

print Insert_Sort([2,15,6,29,0])

三、时间复杂度:

最差的比较情况  1+2+...... +n-2 + n-1 = n(n-1)/2  n^2/2

最好的比较情况  n-1 ............ 恰好都在对应的位置

平均的情况就是 [n(n-1)/2 + (n-1)]/2  =  n^2/4

最后的结果就是O(n^2)

最新文章

  1. MSDN文档篇
  2. Struts2之开山篇
  3. ARM汇编程序结构
  4. iOS 在UILabel显示不同的字体和颜色(转)
  5. mysql:You can&#39;t specify target table &#39;bpm_tksign_data&#39; for update in FROM clause
  6. iOS学习24之UIControl及其子类
  7. iis 故障导致网站无法访问
  8. 闪回还原点(Flashback Restore Point)
  9. grep详解
  10. Shell脚本编程具体解释
  11. C++虚函数表调用学习
  12. 深入理解Java虚拟机 自己编译JDK
  13. 树形dp总结
  14. Anaconda在Windows上安装不上原因
  15. CocosCreator脚本中向依赖的组件赋值后, 被依赖的组件没有取到值的问题!
  16. c++11の简单线程管理
  17. 在.NET下如何预防XXE注入攻击
  18. μCOS-II移植 - 基于CortexM3
  19. 一种快速统计SQL Server每个表行数的方法
  20. RabbitMQ ——“Hello World”

热门文章

  1. Spark Mllib里如何将预测结果如0或1,转换为文字描述来显示预测结果输出(图文详解)
  2. springmvc写了方法无法访问
  3. prerender-spa-plugin预处理vue项目实践
  4. vs安装包
  5. Todolist总结
  6. this的三个要点
  7. Web 前端开发代码规范(基础)
  8. IIS 服务器支持下载apk 文件
  9. MySQL备份和还原数据库及慢查询日志使用
  10. mongodb复制集里查看主从操作日志oplog