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中操作字符串之replace()方法的使用
May 19 Python
Python函数式编程指南(三):迭代器详解
Jun 24 Python
Python对象转JSON字符串的方法
Apr 27 Python
Python安装图文教程 Pycharm安装教程
Mar 27 Python
对于Python深浅拷贝的理解
Jul 29 Python
Python 音频生成器的实现示例
Dec 24 Python
Pytorch提取模型特征向量保存至csv的例子
Jan 03 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
django queryset 去重 .distinct()说明
May 19 Python
Pycharm同步远程服务器调试的方法步骤
Nov 04 Python
PyCharm Community安装与配置的详细教程
Nov 24 Python
用Python提取PDF表格的方法
Apr 11 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
PHP Document 代码注释规范
2009/04/13 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
TP5框架实现签到功能的方法分析
2020/04/05 PHP
新老版本juqery获取radio对象的方法
2010/03/01 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
使用jQuery实现WordPress中的Ctrl+Enter和@评论回复
2016/05/21 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
Angularjs 实现移动端在线测评效果(推荐)
2017/04/05 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
关于meta viewport中target-densitydpi属性详解(推荐)
2017/08/18 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
[54:56]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第三局
2016/03/06 DOTA
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
Google开源的Python格式化工具YAPF的安装和使用教程
2016/05/31 Python
Python分支结构(switch)操作简介
2018/01/17 Python
Pandas中Series和DataFrame的索引实现
2019/06/27 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
Django中的静态文件管理过程解析
2019/08/01 Python
基于python 凸包问题的解决
2020/04/16 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
中文专业毕业生自荐书范文
2014/01/04 职场文书
小学教师国培感言
2014/02/08 职场文书
《中华少年》教学反思
2014/02/15 职场文书
个人职业及收入证明
2014/10/13 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
2016年社区文体活动总结
2016/04/06 职场文书