排序
阿尔兹
将生活技能点满,活成百科全书
展开
-
十大经典排序算法的复杂度分析
十种常见排序算法可以分为两大类:非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。各排序算法复杂度及稳定性:相关概念稳定:如果a原本在b前面,而a=b...原创 2019-08-01 20:30:34 · 75867 阅读 · 9 评论 -
排序算法--计数排序--详解实例与代码
计数排序:特点:非比较排序 桶思想的一种适用场景:量大但是范围小某大型企业数万员工的年龄排序 范围(0--100) 如何快速得知高考名次(腾讯面试题) 范围(0--750)以下面为例: n多个数,但是范围是0--60 第一步:开辟一个长度为范围大小的计数数组,上图为61,并赋值为0 第二步:从原数组的第一个数字开始遍历,...原创 2019-08-02 22:27:52 · 2979 阅读 · 0 评论 -
排序算法--基数排序--详解与代码分析
基数排序:基数排序是桶排序的改进和推广。设文件中任一记录R【i】的关键字均由d个分量(Ki^0,Ki^1,...,Ki^(d-1))构成,则基数排序的基木思想是:从高到低依次对K^j(j=d-1,d-2,,0)进行桶排序。在d越桶排序中,所需的桶数就是基数rd,这就是“基数排序”名称的由来。特点:非比较排序 桶思想的一种 多关键字排序算法思想:多关键字排序以此为例:...原创 2019-08-02 21:37:43 · 3830 阅读 · 0 评论 -
排序算法--冒泡排序--详解与代码实现及优化
冒泡排序:冒泡排序算法的原理如下:比较相邻的两个元素,如果前者比后者大(反之倒序),则交换。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。 针对所有的元素重复以上的步骤。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。例:给出数列{9,6,1,3,5}先排数字9,以此比较与交换 然后是数字6...原创 2019-07-31 13:28:38 · 11288 阅读 · 4 评论 -
排序算法--选择排序--详解及代码
选择排序:选择排序( Selection sort)是一种简单直观的排序算法。它的工作原理是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序算法通过选择和交换来实现排序,其排序流程如下:(1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。 (2)接着从剩下的n-1个数据中选择次小的...原创 2019-07-31 21:46:30 · 61660 阅读 · 14 评论 -
排序算法--插入排序--详解与代码
插入排序:有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法—一插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外, 而第二部...原创 2019-07-31 22:12:34 · 14757 阅读 · 5 评论 -
排序算法--快速排序--详解与代码示例
快速排序:快速排序( quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。设要排序的数组是A[0]…A[n-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所...原创 2019-07-31 23:03:34 · 28071 阅读 · 5 评论 -
排序算法--归并排序--详解与代码
归并排序:归并排序:( Merge Sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法( Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并,使用中牺牲空间换取时间的算法归并操作( merge),也叫归并算法,指的是将两个顺序序列合并成...原创 2019-08-01 13:22:40 · 6143 阅读 · 2 评论 -
排序算法--堆排序--详解与代码实例
堆排序:Heapsort类似于选择排序我们反复选择最大的项目并将其移动到列表的末尾。主要的区别在于,我们不是扫描整个列表来查找最大的项目,而是将列表转换为最大堆(父节点的值总是大于子节点,反之最小堆)以加快速度。注意:堆一定是一棵完全二叉树;Heapify堆化:我们的第一步是将输入列表转换为堆(也称为“堆化”它)把数列的数值视为完全二叉树的结点(从0开始) 从倒数第...原创 2019-08-01 20:10:07 · 5094 阅读 · 2 评论