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 相关文章推荐
记录Django开发心得
Jul 16 Python
Python写的Socks5协议代理服务器
Aug 06 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
python实现文件路径和url相互转换的方法
Jul 06 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
Python中关于浮点数的冷知识
Sep 22 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 Python
Python如何操作office实现自动化及win32com.client的运用
Apr 01 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
Apr 08 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 Python
教你怎么用Python监控愉客行车程
Apr 29 Python
Python中的嵌套循环详情
Mar 23 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
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
php实现的漂亮分页方法
2014/04/17 PHP
Zend Framework教程之视图组件Zend_View用法详解
2016/03/05 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
javascript中的几个运算符
2007/06/29 Javascript
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
JS制作适用于手机和电脑的通知信息效果
2016/10/28 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
BootStrap 动态表单效果
2017/06/02 Javascript
详解Eslint 配置及规则说明
2018/09/10 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
webpack-url-loader 解决项目中图片打包路径问题
2019/02/15 Javascript
vue弹出框组件封装实例代码
2019/10/31 Javascript
python操作数据库之sqlite3打开数据库、删除、修改示例
2014/03/13 Python
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
使用anaconda的pip安装第三方python包的操作步骤
2018/06/11 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
python yield关键词案例测试
2019/10/15 Python
python实现的批量分析xml标签中各个类别个数功能示例
2019/12/30 Python
python FTP编程基础入门
2021/02/27 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
SQL Server数据库笔试题和答案
2016/02/04 面试题
销售类个人求职信范文
2013/09/25 职场文书
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android