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 相关文章推荐
手动实现把python项目发布为exe可执行程序过程分享
Oct 23 Python
简单的Python抓taobao图片爬虫
Oct 26 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
Python爬虫包 BeautifulSoup  递归抓取实例详解
Jan 28 Python
Python简单实现自动删除目录下空文件夹的方法
Aug 29 Python
Python 实现简单的shell sed替换功能(实例讲解)
Sep 29 Python
python实现ID3决策树算法
Dec 20 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
Python实现自定义读写分离代码实例
Nov 16 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
Python根据指定文件生成XML的方法
Jun 29 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 一元分词算法
2009/11/30 PHP
php mail to 配置详解
2014/01/16 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php递归删除指定文件夹的方法小结
2015/04/20 PHP
PHP 数组操作详解【遍历、指针、函数等】
2020/05/13 PHP
理解JavaScript变量作用域更轻松
2009/10/25 Javascript
firefox火狐浏览器与与ie兼容的2个问题总结
2010/07/20 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
jQuery Mobile动态刷新页面样式的实现方法
2016/05/28 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
JS实现css hover操作的方法示例
2017/04/07 Javascript
关于Google发布的JavaScript代码规范你要知道哪些
2018/04/04 Javascript
JS实现textarea通过换行或者回车把多行数字分割成数组并且去掉数组中空的值
2018/10/29 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
vue 组件中使用 transition 和 transition-group实现过渡动画
2019/07/09 Javascript
vue项目中极验验证的使用代码示例
2019/12/03 Javascript
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
python中使用OpenCV进行人脸检测的例子
2014/04/18 Python
python 读取文本文件的行数据,文件.splitlines()的方法
2018/07/12 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
python实现二维插值的三维显示
2018/12/17 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
eBay法国购物网站:eBay.fr
2017/10/21 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
项目开发计划书
2014/01/09 职场文书
人民调解员先进事迹材料
2014/05/08 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
横空出世观后感
2015/06/09 职场文书
Python打包exe时各种异常处理方案总结
2021/05/18 Python
Python 中的Sympy详细使用
2021/08/07 Python