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变量与常量
Jun 02 Python
python操作 hbase 数据的方法
Dec 18 Python
Python编程对列表中字典元素进行排序的方法详解
May 26 Python
Python编程实现正则删除命令功能
Aug 30 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
python样条插值的实现代码
Dec 17 Python
提升Python程序性能的7个习惯
Apr 14 Python
使用Python函数进行模块化的实现
Nov 15 Python
构建高效的python requests长连接池详解
May 02 Python
python 对一幅灰度图像进行直方图均衡化
Oct 27 Python
python线程优先级队列知识点总结
Feb 28 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
浅谈电磁辐射对健康的影响
2021/03/01 无线电
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP convert_uudecode()函数讲解
2019/02/14 PHP
jquery validate在ie8下的bug解决方法
2013/11/13 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
jQuery仿360导航页图标拖动排序效果代码分享
2015/08/24 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
Vue Extends 扩展选项用法完整实例
2019/09/17 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
解决vue组件没显示,没起作用,没报错,但该显示的组件没显示问题
2020/09/02 Javascript
[01:09:23]KG vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
使用Python的Twisted框架实现一个简单的服务器
2015/04/16 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python自定义线程类简单示例
2018/03/23 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
在Python 字典中一键对应多个值的实例
2019/02/03 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
Python 导入文件过程图解
2019/10/15 Python
Python实现鼠标自动在屏幕上随机移动功能
2020/03/14 Python
python logging通过json文件配置的步骤
2020/04/27 Python
基于Python实现简单学生管理系统
2020/07/24 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
英国手工布艺沙发在线购买:Sofas & Stuff
2018/03/02 全球购物
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
.NET remoting中对象激活的两种方式
2015/06/08 面试题
司机岗位职责说明书
2014/07/29 职场文书
写给医院的感谢信
2015/01/22 职场文书
学习计划是什么
2019/04/30 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
PostgreSQL并行计算算法及参数强制并行度设置方法
2022/04/07 PostgreSQL
Spring Cloud OpenFeign模版化客户端
2022/06/25 Java/Android