Python实现插入排序和选择排序的方法


Posted in Python onMay 12, 2019

话不多说,让我们从最基本的排序算法开始吧

插入排序

如下图所示,插入排序的实现思路顾名思义,就是 不断地在一个已经是有序的数组中,寻找合适位置并插入新元素 。

Python实现插入排序和选择排序的方法

具体实现步骤为:

首先我们把整个数组拆分为有序区间和未排序区间,有序区间在插入排序一开始只有一个元素,就是数组的第一个元素。

接在有序区间之后的一个元素就是准备插入的元素,在图中就是标为绿色的元素,在有序区间内寻找位置并插入。

其寻找逻辑为:从后往前依次进行比较,如果待插入元素大于当前元素,则将待插入元素插入到当前元素的后一位,如果待插入元素小于当前元素,则将当前元素后移一位。不断重复该过程直至到数组的最后一位

其实现的具体代码为:

def insertion_sort(a):
 length = len(a)
 if length <=1:
  return 
 for i in range(1,length):
  j = i-1
  value = a[i]
  while j >=0:
   if a[j]<value:
    a[j+1] = value
    break
   else:
    a[j+1] = a[j]
    if j == 0:
     a[j] = value 
   j -=1
  print(a)

    return a时间复杂计算为:我们需要将整个数组遍历一遍,所以这一部分为O(n),在每一次遍历中都要执行一次插入操作,其时间复杂度为O(n),所以总时间复杂度为O(n2)

选择排序

选择排序跟插入排序算法类似,都是将数组分为有序区间和未排序区间,区别在于插入排序是将一个新元素插入到有序区间内,而选择排序则是在未排序区间中找到最小元素,并交换到有序区间之后。

Python实现插入排序和选择排序的方法

实现代码为:

def selection_sort(a):
 length = len(a)
 if length <=1:
  return
 for i in range(0,length-1):
  min_value = a[i]
  min_index = i
  j = i+1
  while j<length:
   if a[j] < min_value:
    min_value = a[j]
    min_index = j
   j += 1
  a[i],a[min_index] = a[min_index],a[i]

    return a时间复杂度计算:数组长度为n,一共需要寻找n次最小值,每次寻找最小值都要遍历未排序区间一次,其时间复杂度为O(n),乘以n次为O(n2)

Python 相关文章推荐
python3.3教程之模拟百度登陆代码分享
Jan 16 Python
Python中pow()和math.pow()函数用法示例
Feb 11 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
钉钉群自定义机器人消息Python封装的实例
Feb 20 Python
python 获取微信好友列表的方法(微信web)
Feb 21 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
Oct 29 Python
Python常用GUI框架原理解析汇总
Dec 07 Python
Python中将两个或多个list合成一个list的方法小结
May 12 #Python
python实现海螺图片的方法示例
May 12 #Python
详解用python写网络爬虫-爬取新浪微博评论
May 10 #Python
python的turtle库使用详解
May 10 #Python
详解Python sys.argv使用方法
May 10 #Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 #Python
python lxml中etree的简单应用
May 10 #Python
You might like
全国FM电台频率大全 - 12 安徽省
2020/03/11 无线电
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
PHP程序61条面向对象分析设计的经验小结
2008/11/12 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
解决文件名解压后乱码的问题 将文件名进行转码的代码
2012/01/10 PHP
PHP多文件上传类实例
2015/03/07 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
jquery 弹出登录窗口实现代码
2009/12/24 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
js对数字的格式化使用说明
2011/01/12 Javascript
js控制表单奇偶行样式的简单方法
2013/07/31 Javascript
JS对select控件option选项的增删改查示例代码
2013/10/21 Javascript
js字母大小写转换实现方法总结
2013/11/13 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
JS常用倒计时代码实例总结
2017/02/07 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
js中事件对象和事件委托的介绍
2019/01/21 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
python中使用smtplib和email模块发送邮件实例
2014/04/22 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
教师节活动总结
2014/08/29 职场文书
庆祝教师节演讲稿
2014/09/03 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
房屋买卖协议样本
2014/11/16 职场文书
未中标通知书
2015/04/17 职场文书
幼儿园见习总结
2015/06/23 职场文书
2019销售早会主持词
2019/06/27 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
Python 恐龙跑跑小游戏实现流程
2022/02/15 Python