还剩30页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
常用算法排序目录•排序算法概述•冒泡排序•选择排序•插入排序•快速排序•归并排序01排序算法概述Chapter排序的定义排序是将一组数据按照某种规则进行排列的过程,以便更好地满足特定的需求或解决特定的问题01排序算法是实现排序过程的计算方法,其目的是将无序的数据按照一定的顺序排列,以便更好地进行数据检索、分析和处理02排序的分类按照排序的稳定性可以分为稳定的排序算法和不稳定的排序算法稳定的排序算法是指在排序过程中,具有相同值的元素在排序后保持其原始的相对顺序不稳定的排序算法则不保证保持原始的相对顺序按照排序的复杂度可以分为线性时间复杂度的排序算法和指数时间复杂度的排序算法线性时间复杂度的排序算法是指随着数据量的增加,所需的时间或步骤数按线性关系增长的算法指数时间复杂度的排序算法则是指随着数据量的增加,所需的时间或步骤数按指数关系增长的算法排序算法的性能指标衡量排序算法执行效率的重要指时间复杂度标,表示算法执行所需的时间或步骤数与数据量之间的关系衡量排序算法所需额外空间的重空间复杂度要指标,表示算法执行过程中所需的最大存储空间衡量排序算法在处理相同值元素稳定性时的稳定性的指标,稳定的排序算法能够保持相同值的元素的相衡量排序算法在处理大规模数据对顺序可扩展性时的性能表现,包括对大规模数据的处理速度和内存占用情况02冒泡排序Chapter冒泡排序的基本思想冒泡排序的基本思想是通过相邻元素之间的比较和交换,使得每一轮循环都能将当前未排序部分中最大的元素冒泡到未排序部分的末尾具体来说,从第一个元素开始,依次比较相邻的两个元素,若顺序不正确则交换它们的位置,直到未排序部分为空或者已排序部分为空冒泡排序的算法实现冒泡排序的算法实现通常使用循环结构,通过不断比较和交换相邻元素的位置,直到满足排序结束的条件具体的算法实现可以按照以下步骤进行
1.定义一个数组arr[],表示待排序的元素;冒泡排序的算法实现
2.定义一个变量n,表示数组arr[]的长度;
3.定义一个变量i,表示当前
4.从i=0开始,依次比较arr[i]未排序部分的起始位置;和arr[i+1],若arr[i]大于arr[i+1],则交换它们的位置;冒泡排序的算法实现
5.将i加1,重复步骤4,直到i等于n-1;
6.重复步骤3-5,直到未排序部分为空或已排序部分为空冒泡排序的时间复杂度与空间复杂度冒泡排序的时间复杂度为On^2,其中n为待排序元素的个数这是因为在最坏情况下,需要比较n*n-1/2次元素冒泡排序的空间复杂度为O1,因为只需要常数级别的额外空间来存储循环变量等03选择排序Chapter选择排序的基本思想选择排序的基本思想是在未排序的序列中找到最小(或最大)01的元素,存放到排序序列的起始位置然后再从剩余未排序的元素中继续寻找最小(或最大)元素,02然后放到已排序序列的末尾以此类推,直到所有元素均排序完毕03选择排序的算法实现010203第一步第二步第三步找到未排序部分的最小再从剩余未排序的元素中重复第二步,直到所有元(或最大)元素,存放到继续寻找最小(或最大)素均排序完毕排序序列的起始位置元素,然后放到已排序序列的末尾选择排序的时间复杂度与空间复杂度时间复杂度空间复杂度选择排序的时间复杂度为On^2,其中n为待排序选择排序的空间复杂度为O1,因为选择排序只需元素的数量因为选择排序需要多次遍历待排序序要一个额外的存储空间来存储最小(或最大)元素列,每次遍历都需要进行n次比较操作的位置信息,不需要开辟额外的存储空间来存储待排序序列04插入排序Chapter插入排序的基本思想插入排序的基本思想是将数组分为已排序和未排序两部分,初始时已排序部分包含一个元素,之后从未排序部分取出元素,并在已排序部分找到合适的插入位置插入,并保持已排序部分一直有序,重复此过程,直到未排序部分元素为空,算法结束插入排序在每一步中都通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入插入排序在实现上,通常采用in-place排序(即只需用到O1的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间插入排序的算法实现01插入排序的算法实现步骤如下
021.从第一个元素开始,该元素可以认为已经被排序
032.取出下一个元素,在已经排序的元素序列中从后向前扫描插入排序的算法实现
3.如果该元素(已排序)
4.重复步骤3,直到找到大于新元素,将该元素移已排序的元素小于或者等到下一位置于新元素的位置
5.将新元素插入到该位置
6.重复步骤2~5后插入排序的时间复杂度与空间复杂度插入排序的时间复杂度在最坏情况下,即数据完全逆序时,需要进行的比较和交换次数最多,因此时间复杂度为On^2插入排序的空间复杂度由于插入排序是就地排序,不需要额外的存储空间,因此空间复杂度为O105快速排序Chapter快速排序的基本思想快速排序是一种分而治之的排序算法,快速排序的基本思想是利用分治策略,通过选取一个基准元素,将数组分为将一个复杂的问题分解为两个或更多两个子数组,一个子数组的所有元素的相同或相似的子问题,直到最后子都比基准元素小,另一个子数组的所问题可以简单的直接求解,原问题的有元素都比基准元素大,然后对这两VS解即子问题的解的合并个子数组递归进行快速排序,最终实现整个数组的有序排列快速排序的算法实现选取基准元素分割数组选择一个基准元素,通常选取第将数组分为两个子数组,一个子一个元素或者最后一个元素,也数组的所有元素都比基准元素小,01可以随机选取另一个子数组的所有元素都比基准元素大0203递归排序合并结果对两个子数组递归进行快速排序将两个已排序的子数组合并成一个有序数组04快速排序的时间复杂度与空间复杂度时间复杂度在最坏情况下,快速排序的时间复杂度为On^2,其中n为数组的长度但在平均情况下,快速排序的时间复杂度为Onlogn空间复杂度快速排序需要额外的空间来存储递归调用的栈,因此其空间复杂度为Ologn06归并排序Chapter归并排序的基本思想归并排序是一种分治算法,它将一个无序数组拆分成若干个子数组,对子数组进行排序,然后合并已排序的子数组合并成一个有序数组归并排序的关键在于将数组拆分到足够小,使得子数组可以快速排序,然后将有序的子数组合并成一个有序数组归并排序的基本思想是将问题分解为若干个子问题,对子问题求解,然后将子问题的解组合起来形成原问题的解归并排序的算法实现010203归并排序的算法实现主
1.将数组拆分成若干个
2.对每个子数组进行排要包括以下步骤子数组,直到每个子数序,可以使用插入排序、组只包含一个元素选择排序等简单排序算法归并排序的算法实现
3.将已排序的子数组合并成一个有序数组,直到1合并为完整的数组归并排序的算法实现中需要注意以下几点
21.在合并子数组时,需要使用一个辅助数组来暂3存合并过程中的数据归并排序的算法实现
2.在合并过程中,需要记录每个子数组的起始位置和长度,以便正确地合并数据
3.在合并过程中,需要处理数据移动和交换等操作,保证数据的正确性归并排序的时间复杂度与空间复杂度归并排序的时间复杂度为Onlogn,其中n是数组的长度这是因为在最坏情况下,归并排序需要将数组拆分成单个元素,然后合并成一个有序数组,这个过程需要进行n次合并操作,每次合并的时间复杂度为On归并排序的空间复杂度为On,这是因为在合并过程中需要使用一个辅助数组来暂存数据THANKS感谢观看。
个人认证
优秀文档
获得点赞 0