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高并发异步服务器核心库forkcore使用方法
Nov 26 Python
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
将Django框架和遗留的Web应用集成的方法
Jul 24 Python
Python基于更相减损术实现求解最大公约数的方法
Apr 04 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
Laravel框架表单验证格式化输出的方法
Sep 25 Python
python matplotlib如何给图中的点加标签
Nov 14 Python
Python分析最近大火的网剧《隐秘的角落》
Jul 02 Python
Python基础之变量的相关知识总结
Jun 23 Python
Pygame Rect区域位置的使用(图文)
Nov 17 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写入WRITE编码为UTF8的文件的实现代码
2008/07/07 PHP
mysql下创建字段并设置主键的php代码
2010/05/16 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
2016/10/29 Javascript
谈谈第三方App接入微信登录 解读
2016/12/27 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
2017/08/25 Javascript
浅谈SpringMVC中post checkbox 多选框value的值(隐藏域方式)
2018/01/08 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
浅谈微信小程序之官方UI框架we-ui使用教程
2018/08/20 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
django 创建过滤器的实例详解
2017/08/14 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
python 实现矩阵按对角线打印
2019/11/29 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
Python制作运行进度条的实现效果(代码运行不无聊)
2021/02/24 Python
美国专注于健康商品的网站:eVitamins
2017/01/23 全球购物
澳大利亚宠物食品和药物在线:Jumbo Pets
2018/03/24 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
省优秀教师事迹材料
2014/01/30 职场文书
教师个人自我鉴定
2014/02/08 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
红色经典电影观后感
2015/06/18 职场文书
2019个人工作总结
2019/06/21 职场文书
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript