- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
. . .
常用排序算法比较与分析
?一、常用排序算法简述
下面主要从排序算法的基本概念、原理出发,分别从算法的时间复杂度、空间复杂度、算法的稳定性和速度等方面进行分析比较。依据待排序的问题大小(记录数量 n)的不同,排序过程中需要的存储器空间也不同,由此将排序算法分为两大类:【内排序】、【外排序】。
内排序:指排序时数据元素全部存放在计算机的随机存储器RAM中。
外排序:待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中还需要对外存进行访问的排序过程。
先了解一下常见排序算法的分类关系(见图1-1)
图1-1 常见排序算法
二、内排序相关算法
2.1 插入排序
核心思想:将一个待排序的数据元素插入到前面已经排好序的数列中的适当位置,使数据元素依然有序,直到待排序数据元素全部插入完为止。
2.1.1 直接插入排序
核心思想:将欲插入的第i个数据元素的关键码与前面已经排序好的i-1、i-2 、i-3、 … 数据元素的值进行顺序比较,通过这种线性搜索的方法找到第i个数据元素的插入位置 ,并且原来位置 的数据元素顺序后移,直到全部排好顺序。
直接插入排序中,关键词相同的数据元素将保持原有位置不变,所以该算法是稳定的,时间复杂度的最坏值为平方阶O(n2),空间复杂度为常数阶O(l)。
Python源代码:
#-------------------------直接插入排序--------------------------------?
def?insert_sort(data_list):?
?#遍历数组中的所有元素,其中0号索引元素默认已排序,因此从1开始?
?for?x?in?range(1,?len(data_list)):?
?#将该元素与已排序好的前序数组依次比较,如果该元素小,则交换?
?#range(x-1,-1,-1):从x-1倒序循环到0?
?for?i?in?range(x-1,?-1,?-1):?
?#判断:如果符合条件则交换?
?if?data_list[i]??data_list[i+1]:?
?temp?=?data_list[i+1]?
?data_list[i+1]?=?data_list[i]?
?data_list[i]?=?temp?
2.1.2 希尔排序
核心思想:是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
希尔排序时间复杂度会比O(n2)好一些,然而,多次插入排序中,第一次插入排序是稳定的,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,所以希尔排序是不稳定的。
Python源代码:
#-------------------------希尔排序-------------------------------?
def?insert_shell(data_list):?
?#初始化step值,此处利用序列长度的一半为其赋值?
?group?=?int(len(data_list)/2)?
?#第一层循环:依次改变group值对列表进行分组?
?while?group??0:?
?#下面:利用直接插入排序的思想对分组数据进行排序?
?#range(group,len(data_list)):从group开始?
?for?i?in?range(group,?len(data_list)):?
?#range(x-group,-1,-group):从x-group开始与选定元素开始倒序比较,每个比较元素之间间隔group?
?for?j?in?range(i-group,?-1,?-group):?
?#如果该组当中两个元素满足交换条件,则进行交换?
?if?data_list[j]??data_list[j+group]:?
?temp?=?data_list[j+group]?
?data_list[j+group]?=?data_list[j]?
?data_list[j]?=?temp?
?#while循环条件折半?
?group?=?int(group?/?2)?
2.2 选择排序
核心思想:每一趟扫描时,从待排序的数据元素中选出关键码最小或最大的一个元素,顺序放在已经排好顺序序列的最后,直到全部待排序的数据元素排完为止。
2.2.1 直接选择排序
核心思想:给每个位置选择关键码最小的数据元素,即:选择最小的元素与第一个位置的元素交换,然后在剩下的元素中再选择最小的与第二个位置的元素交换,直到倒数第二个元素和最后一个元素比较为止。
根据其基本思想,每当扫描一趟时,如果当前元素比一个元素小,而且这个小元素又出现在一个和当前
您可能关注的文档
- 2017年九年级数学中考压轴题练习(1)与答案.doc
- 2017年秋一年级(上册)数学期末考试卷6.doc
- 2017新北师大版三年级(下册)数学教(学)案(全册).doc
- 2018广州中考物理试卷与答案.doc
- 2018年广元中考英语模拟试题(一)与答案.doc
- 2019_2020年高考数学压轴题集锦_导数和应用(四).doc
- 2019测试工工作汇报3篇.doc
- 2019防损工作汇报3篇.doc
- 2019高考物理常见难题大盘点匀变速直线运动.doc
- 2019高考英语3_2_1精品系列专项27新题型_标题匹配(学生版).doc
- 特种设备安全生产隐患排查整治工作情况汇报 .pdf
- 2024年6月《足球小将》幼儿园小班体育教案范文模板示例 .pdf
- 小学教师学习“双减”政策心得体会3篇 .pdf
- 重庆市秀山县2022-2023学年八年级下学期期末语文试题 .pdf
- 2024年用电及动火安全管理制度(2篇) .pdf
- 浙江省衢州市2022-2023学年七年级上学期期末考试英语试题 .pdf
- 2024版服务器基础知识培训PPT课件 .pdf
- 2024最新国家开放大学电大《幼儿文学》期末考试题库(含答案) .pdf
- 2023年人教版四年级《语文下册》期末试卷及答案【下载】 .pdf
- 2023年山西临汾市直事业单位综合类《科目一》、《科目二》精选真题.pdf
文档评论(0)