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函数装饰器用法实例详解
Jun 04 Python
Django小白教程之Django用户注册与登录
Apr 22 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
python+pandas分析nginx日志的实例
Apr 28 Python
python opencv 读取图片 返回图片某像素点的b,g,r值的实现方法
Jul 03 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
使用Python实现分别输出每个数组
Dec 06 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
django使用graphql的实例
Sep 02 Python
python更新数据库中某个字段的数据(方法详解)
Nov 18 Python
使用scrapy实现增量式爬取方式
Jun 21 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 curl post 时出现的问题解决
2014/01/30 PHP
php猜单词游戏
2015/09/29 PHP
在IE模态窗口中自由查看HTML源码的方法
2007/03/08 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
让复选框只能选择一项的方法
2013/10/08 Javascript
JS实现一个列表中包含上移下移删除等功能
2014/09/24 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
AngularJS基础学习笔记之表达式
2015/05/10 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
如何用js判断dom是否有存在某class的值
2017/02/13 Javascript
JQ中$(window).load和$(document).ready区别与执行顺序
2017/03/01 Javascript
Angular.js基础学习之初始化
2017/03/10 Javascript
基于AGS JS开发自定义贴图图层
2017/03/31 Javascript
微信小程序三级联动选择器使用方法
2020/05/19 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
django 数据库 get_or_create函数返回值是tuple的问题
2020/05/15 Python
Python正则表达式如何匹配中文
2020/05/27 Python
Michael Kors美国官网:美式奢侈生活风格的代表
2016/11/25 全球购物
国际礼品店:GiftsnIdeas
2018/05/03 全球购物
Java的基础面试题附答案
2016/01/10 面试题
大学毕业生通用自荐信范文
2013/10/31 职场文书
护士的岗位职责
2013/12/04 职场文书
给老婆的保证书范文
2014/04/28 职场文书
优秀纪检干部材料
2014/08/27 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
Keras多线程机制与flask多线程冲突的解决方案
2021/05/28 Python
vue中data里面的数据相互使用方式
2022/06/05 Vue.js