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操作SQLite数据库的方法详解
Jun 16 Python
python读取视频流提取视频帧的两种方法
Oct 22 Python
简单了解python高阶函数map/reduce
Jun 28 Python
python 实现在一张图中绘制一个小的子图方法
Jul 07 Python
Python中面向对象你应该知道的一下知识
Jul 10 Python
HTML的form表单和django的form表单
Jul 25 Python
python解析xml文件方式(解析、更新、写入)
Mar 05 Python
python3注册全局热键的实现
Mar 22 Python
python中if及if-else如何使用
Jun 02 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
python实现mask矩阵示例(根据列表所给元素)
Jul 30 Python
如何把python项目部署到linux服务器
Aug 26 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脚本的10个技巧(5)
2006/10/09 PHP
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
PHP中的静态变量及static静态变量使用详解
2015/11/05 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
javascript 终止函数执行操作
2014/02/14 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
JavaScript中数据结构与算法(三):链表
2015/06/19 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
jQuery实现动态添加和删除input框代码实例
2019/03/29 jQuery
iSlider手机端图片滑动切换插件使用详解
2019/12/24 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
基于python中__add__函数的用法
2019/11/25 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
Superdry极度干燥美国官网:英国制造的服装品牌
2018/11/13 全球购物
Oasis服装官网:时尚女装在线
2020/07/09 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
关于赌博的检讨书
2014/01/24 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
党风廉设责任书
2014/04/16 职场文书
乔丹名人堂演讲稿
2014/05/24 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
工作年限证明模板
2014/11/01 职场文书
golang中实现给gif、png、jpeg图片添加文字水印
2021/04/26 Golang
基于Golang 高并发问题的解决方案
2021/05/08 Golang
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python
python小型的音频操作库mp3Play
2022/04/24 Python
Django框架模板用法详解
2022/06/10 Python