十大排序算法
羽苡”
这个作者很懒,什么都没留下…
展开
-
【排序算法】深究
十大排序算法相关术语算法分类按算法时间复杂度分类按空间复杂度分类按稳定性分类按照使用场景区分 相关术语 算法稳定性:如果 a=b,排序前后 a、b的相对位置不变即为稳定; 算法时间复杂度:算法运行时间的函数,用大 O 符号表述; 算法空间复杂度:算法需要的内存空间大小; 算法分类 按算法时间复杂度分类 时间复杂度:O(n^2) 插入排序、选择排序、冒泡排序 时间复杂度:O(n^1.3) 希尔排序 时间复杂度:O(nlogn) 堆排序、归并排序、快速排序 时间复杂度:O(n+k)原创 2022-04-14 17:22:26 · 202 阅读 · 0 评论 -
计数排序
计数排序 第一步:找出原数组中元素值最大的,记为max。 第二步:创建一个新数组count,其长度是max加1,其元素默认值都为0。 第三步:遍历原数组中的元素,以原数组中的元素作为count数组的索引,以原数组中的元素出现次数作为count数组的元素值。 第四步:创建结果数组result,起始索引index。 第五步:遍历count数组,找出其中元素值大于0的元素,将其对应的索引作为元素值填充到result数组中去,每处理一次,count中的该元素值减1,直到该元素值不大于0,依次处理count中剩下的元原创 2020-10-18 11:24:41 · 90 阅读 · 0 评论 -
归并排序
归并排序 归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法); 自下而上的迭代; 和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。 2. 算法步骤 将序列中待原创 2020-10-18 11:24:10 · 76 阅读 · 0 评论 -
堆排序
堆排序 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法: 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列; 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列; 堆排序的平均时间复杂度为 Ο(nlogn)。 1. 算法步骤 将待排序序列构建成一个堆 H[0……n原创 2020-10-18 11:23:40 · 57 阅读 · 0 评论 -
插入排序
插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。 1. 算法步骤 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置原创 2020-10-18 11:23:22 · 367 阅读 · 0 评论 -
基数排序
基数排序 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 1. 基数排序 vs 计数排序 vs 桶排序 基数排序有两种方法: 这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异: 基数排序:根据键值的每位数字来分配桶; 计数排序:每个桶只存储单一键值; 桶排序:每个桶存储一定范围的数值; 2. LSD 基数排序动图演示 3.代码 publi原创 2020-10-18 11:22:48 · 98 阅读 · 0 评论