常用的排序算法总结(二)
选择排序
算法思想
选择排序提高了冒泡排序的性能,它每遍历一次列表只交换一次数据,即进行一次遍历时找 到最大的项,完成遍历后,再把它换到正确的位置。和冒泡排序一样,第一次遍历后,最大的数 据项就已归位,第二次遍历使次大项归位。这个过程持续进行,一共需要 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):
这行代码在数列很大的时候,会不听的新建列表,这回损害性能,这是非算法思想因素的影响,但是需要注意一下。
有帮助到你的点赞、收藏和关注一下吧
需要更多教程,微信扫码即可
常用的排序算法总结(二)相关推荐
- 插入排序 php,常用的排序算法(二)--插入排序(PHP实现)
常用的排序算法系列 插入排序 插入排序是一种逻辑上非常好理解的排序方式,整个排序的核心就是不断在当前已经排好部分数据的数组里,找到合适的位置插入新数据.就像抓扑克牌,抓一张,然后再手里已经部分已经排好 ...
- 常用的排序算法的时间复杂度和空间复杂度
常用的排序算法的时间复杂度和空间复杂度 1.时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出 ...
- 10大排序算法之二:冒泡排序【稳定的】,但复杂度高,一般不用冒泡排序的
10大排序算法之二:冒泡排序[稳定的],但复杂度高,一般不用冒泡排序的 提示:整个算法界,一共有十大排序算法,每一个算法都要熟悉,才算是算法入门 算法界的十大排序算法分别是: 选择排序.冒泡排序.插入 ...
- STL常用的排序算法
常用的排序算法 merge() sort() random_shuffle() reverse() merge() 以下是排序和通用算法:提供元素排序策略 merge: 合并两个有序序列,存放到另一个 ...
- 常用的排序算法的时间复杂度和空间复杂度 .
常用的排序算法的时间复杂度和空间复杂度 排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n2) O(n2) 稳定 O(1) 快速排序 O(n2) O(n*log2n) 不稳定 ...
- php递归算法排序,php常用的排序算法代码[冒泡,递归排序-PHP源码
<script>ec(2);<script> php 常用的排序算法代码[冒泡,递归排序 冒泡排序算法 function bubblesort($arr) { $n=count ...
- php1到5000排序,常用的排序算法(一)--快速排序(PHP实现)
常用的排序算法系列 快速排序 假设当前需要从小到大进行排序,快速排序的核心思路是,从当前数组中,找到一个元素作为基准比较值(key),分别从两个方向进行比较.从后往前找,比key小元素放在数组前面.然 ...
- java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...
- 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序
这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...
- 常用的排序算法的时间复杂度以及稳定性
排序算法分为一般排序和高级排序,高级排序算法往往效率超高,除此之外,排序算法的稳定性也是可参考的一个指标之一. 一般排序算法 一.冒泡排序 算法代码实现 #include "stdio.h& ...
最新文章
- DotNetNuke安装与下载
- python 文件名相关
- BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离
- SpringCloud 超详细个人笔记
- CreatObject方法参数查询
- IOS中设置圆角图片
- java linux driver,JAVA:使用GeckoDriver在Linux上运行Selenium测试:驱动程序不可执行
- python_字符串常用方法
- 一文看懂测试自动化的玄妙
- MSP MCU I2C入门指南
- 基金仓位“88%魔咒”再现 百点长阳能否击破?
- 你的支付授权失败。请核对你的信息并重试,或尝试其他支付方式。 解决方案
- VMware虚拟机不显示ipv4(无网络)
- jenkins重启页面变成英文
- android简易计算器
- Android 渐变色背景样式
- 渗透测试工具集(非常详细),从零基础入门到精通,看完这一篇就够了(附安装)
- 慕课软件质量保证与测试(第三章.课后作业)
- 每天1点执行的oracle JOB样例
- 超新星计算机网络技术就业方向,超新星网络影响力榜单:林彦俊第三,蔡徐坤跌至第二,第一力压登顶...
热门文章
- 特斯拉在华招聘太阳能和储能项目经理 屋顶光伏业务要来了?
- 荣耀高管回应“标杆”质疑:被对标学习的才能是标杆
- 11.11京东全球好物节战报出炉!苹果、华为全员卖疯...
- 国庆档票房近50亿创纪录 背后影视股却遭遇集体下跌
- “微软高管”拯救必应 搞定盖茨成为合伙人?官方打脸:实为开除员工
- 小米CC开机动画公布:扑面而来的青春活力
- 半导体重磅!英飞凌宣布100亿美元收购赛普拉斯
- 盘点过去10年美国规模最大科技公司IPO:阿里一直是纪录保持者
- 华为P30/P30 Pro细节再曝光:3.5mm耳机插孔和红外遥控各占其一
- 华为nova 4e 3月14日发布:麒麟710+3200万前摄