选择排序

算法思想

选择排序提高了冒泡排序的性能,它每遍历一次列表只交换一次数据,即进行一次遍历时找 到最大的项,完成遍历后,再把它换到正确的位置。和冒泡排序一样,第一次遍历后,最大的数 据项就已归位,第二次遍历使次大项归位。这个过程持续进行,一共需要 n-1 次遍历来排好 n 个数 据,因为最后一个数据必须在第 n-1 次遍历之后才能归位。

代码实现

# 选择排序
def selectionSort(alist):n = len(alist)for i in range(n - 1):# 寻找[i,n]区间里的最小值min_index = ifor j in range(i+1, n):if alist[j] < alist[min_index]:min_index = jalist[i], alist[min_index] = alist[min_index], alist[i]return alist

插入排序

算法思想

插入排序的算法复杂度仍然是 ,但其工作原理稍有不同。它总是保持一个位置靠前的 已排好的子表,然后每一个新的数据项被 “插入” 到前边的子表里,排好的子表增加一项。我们认为只含有一个数据项的列表是已经排好的。每排后面一个数据(从 1 开始到 n-1),这 个的数据会和已排好子表中的数据比较。比较时,我们把之前已经排好的列表中比这个数据大的移到它的右边。当子表数据小于当前数据,或者当前数据已经和子表的所有数据比较了时,就可 以在此处插入当前数据项。

代码实现

# 插入排序
def insertionSort(alist):for i in range(1,len(alist)):currentvalue=alist[i]position=iwhile alist[position-1]>currentvalue and position>0:alist[position]=alist[position-1]position=position-1alist[position]=currentvaluereturn alist

注意,这里在用 Python 实现的时候需要注意,第一次我采用的是下面的代码:

# 插入排序
def insertionSort(blist):n = len(blist)for i in range(1, n):# 寻找a[i]合适的插入位置temp = blist[i]for j in range(i, 0, -1):if (temp < blist[j-1]):blist[j] = blist[j-1]else:breakblist[j-1] = tempreturn blist

在测试性能的时候发现,当数列的逐渐变大的时候,运行时间并不是按照  的速度增长,后来分析发现:

for j in range(i, 0, -1):

这行代码在数列很大的时候,会不听的新建列表,这回损害性能,这是非算法思想因素的影响,但是需要注意一下。


有帮助到你的点赞、收藏和关注一下吧

需要更多教程,微信扫码即可

常用的排序算法总结(二)相关推荐

  1. 插入排序 php,常用的排序算法(二)--插入排序(PHP实现)

    常用的排序算法系列 插入排序 插入排序是一种逻辑上非常好理解的排序方式,整个排序的核心就是不断在当前已经排好部分数据的数组里,找到合适的位置插入新数据.就像抓扑克牌,抓一张,然后再手里已经部分已经排好 ...

  2. 常用的排序算法的时间复杂度和空间复杂度

    常用的排序算法的时间复杂度和空间复杂度                                           1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...

  3. 10大排序算法之二:冒泡排序【稳定的】,但复杂度高,一般不用冒泡排序的

    10大排序算法之二:冒泡排序[稳定的],但复杂度高,一般不用冒泡排序的 提示:整个算法界,一共有十大排序算法,每一个算法都要熟悉,才算是算法入门 算法界的十大排序算法分别是: 选择排序.冒泡排序.插入 ...

  4. STL常用的排序算法

    常用的排序算法 merge() sort() random_shuffle() reverse() merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个 ...

  5. 常用的排序算法的时间复杂度和空间复杂度 .

    常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 ...

  6. php递归算法排序,php常用的排序算法代码[冒泡,递归排序-PHP源码

    <script>ec(2);<script> php 常用的排序算法代码[冒泡,递归排序 冒泡排序算法 function bubblesort($arr) { $n=count ...

  7. php1到5000排序,常用的排序算法(一)--快速排序(PHP实现)

    常用的排序算法系列 快速排序 假设当前需要从小到大进行排序,快速排序的核心思路是,从当前数组中,找到一个元素作为基准比较值(key),分别从两个方向进行比较.从后往前找,比key小元素放在数组前面.然 ...

  8. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  9. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  10. 常用的排序算法的时间复杂度以及稳定性

    排序算法分为一般排序和高级排序,高级排序算法往往效率超高,除此之外,排序算法的稳定性也是可参考的一个指标之一. 一般排序算法 一.冒泡排序 算法代码实现 #include "stdio.h& ...

最新文章

  1. DotNetNuke安装与下载
  2. python 文件名相关
  3. BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离
  4. SpringCloud 超详细个人笔记
  5. CreatObject方法参数查询
  6. IOS中设置圆角图片
  7. java linux driver,JAVA:使用GeckoDriver在Linux上运行Selenium测试:驱动程序不可执行
  8. python_字符串常用方法
  9. 一文看懂测试自动化的玄妙
  10. MSP MCU I2C入门指南
  11. 基金仓位“88%魔咒”再现 百点长阳能否击破?
  12. 你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。 解决方案
  13. VMware虚拟机不显示ipv4(无网络)
  14. jenkins重启页面变成英文
  15. android简易计算器
  16. Android 渐变色背景样式
  17. 渗透测试工具集(非常详细),从零基础入门到精通,看完这一篇就够了(附安装)
  18. 慕课软件质量保证与测试(第三章.课后作业)
  19. 每天1点执行的oracle JOB样例
  20. 超新星计算机网络技术就业方向,超新星网络影响力榜单:林彦俊第三,蔡徐坤跌至第二,第一力压登顶...

热门文章

  1. 特斯拉在华招聘太阳能和储能项目经理 屋顶光伏业务要来了?
  2. 荣耀高管回应“标杆”质疑:被对标学习的才能是标杆
  3. 11.11京东全球好物节战报出炉!苹果、华为全员卖疯...
  4. 国庆档票房近50亿创纪录 背后影视股却遭遇集体下跌
  5. “微软高管”拯救必应 搞定盖茨成为合伙人?官方打脸:实为开除员工
  6. 小米CC开机动画公布:扑面而来的青春活力
  7. 半导体重磅!英飞凌宣布100亿美元收购赛普拉斯
  8. 盘点过去10年美国规模最大科技公司IPO:阿里一直是纪录保持者
  9. 华为P30/P30 Pro细节再曝光:3.5mm耳机插孔和红外遥控各占其一
  10. 华为nova 4e 3月14日发布:麒麟710+3200万前摄