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合并字符串的3种方法
May 21 Python
python修改字典内key对应值的方法
Jul 11 Python
Python的GUI框架PySide的安装配置教程
Feb 16 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
python中文分词,使用结巴分词对python进行分词(实例讲解)
Nov 14 Python
Python hashlib模块用法实例分析
Jun 12 Python
Python3爬虫使用Fidder实现APP爬取示例
Nov 27 Python
Python多线程及其基本使用方法实例分析
Oct 29 Python
Python 音频生成器的实现示例
Dec 24 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
Python接口自动化测试的实现
Aug 28 Python
Elasticsearch 索引操作和增删改查
Apr 19 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
PHP MySQL应用中使用XOR运算加密算法分享
2011/08/28 PHP
Session服务器配置指南与使用经验的深入解析
2013/06/17 PHP
windows下apache搭建php开发环境
2015/08/27 PHP
php对二维数组进行相关操作(排序、转换、去空白等)
2015/11/04 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
laravel5环境隐藏index.php后缀(apache)的方法
2019/10/12 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
javascript宿主对象之window.navigator详解
2016/09/07 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
JavaScript取得gridview中获取checkbox选中的值
2017/07/24 Javascript
jQuery实现键盘回车搜索功能
2017/07/25 jQuery
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
vue路由守卫及路由守卫无限循环问题详析
2019/09/05 Javascript
JS sort方法基于数组对象属性值排序
2020/07/10 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
一步步教你用python的scrapy编写一个爬虫
2019/04/17 Python
python基于socket实现的UDP及TCP通讯功能示例
2019/11/01 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
台湾演唱会订票网站:StubHub台湾
2019/06/11 全球购物
外语专业毕业生个人的自荐信
2013/11/19 职场文书
小班评语大全
2014/05/04 职场文书
踏青活动策划方案
2014/08/19 职场文书
护士2014年终工作总结
2014/11/11 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
董事长助理工作总结2015
2015/07/23 职场文书