
排序
文章平均质量分 93
介绍排序算法
努力的老周
一个老码农,中年大叔。打过工,做过老板。
现有神兽一枚,努力培养神兽中。
展开
-
排序算法概述
基本概念什么是排序排序是计算机内经常进行的一种操作,将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。什么是稳定性定义能保证两个相等的数,经过排序之后,其在序列的前后位置顺序不变。(A1=A2,排序前A1在A2前面,排序后A1还在A2前面)。意义稳定性本质是维持具有相同属性的数据的插入顺序,如果后面需要使用该插入顺序排序,则稳定性排序可以避免这次排序。...原创 2020-01-28 15:58:38 · 7533 阅读 · 0 评论 -
排序——基于C++ STL的排序
概述前面我们介绍了十种排序算法。在实际使用中,我们需要在每道 OI 题目中完成排序算法的具体实现。C++提供了 STL(标准模板库),在这个模板库中,已经提供了排序相关函数。如下图所示。下面我们介绍一下 STL 库的 sort()函数使用方法。STL sort底层实现STL中的sort不是普通的快排,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级...原创 2020-02-11 20:42:57 · 5401 阅读 · 0 评论 -
排序——基数排序(Radix sort)
概述基数排序(Radix sort)属于“分配式排序”(distribution sort),它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。基数排序方法有两类:按照位数比较顺序的不同,将其分为 LSD(Least significant digital) 和 MSD(Most significant digital)两类。最高位优先(Most Signi...原创 2020-02-10 20:59:28 · 5727 阅读 · 0 评论 -
排序——桶排序(Bucket sort)
算法思路桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,也就是根据元素值特性将集合拆分为多个区域,则拆分后形成的多个桶,从值域上看是处于有序状态的。对每个桶中元素进行排序,则所有桶中元素构成的集合是已排序的。算法详解桶排序的思想近乎彻底的分治思想。算法的过程描述如下:根据待排序集合中最大元素和最小元素的差值范围和映射规则,确定申请的桶个数; 遍历待排序集合,将每一个元素...原创 2020-02-11 17:47:56 · 4952 阅读 · 0 评论 -
排序——计数排序(Count sort)
概述计数排序是一个非基于比较的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当 的时候其效率反而不如基于比较的排序,因为基于比较的排序的时间...原创 2020-02-11 19:30:54 · 32018 阅读 · 6 评论 -
排序——堆排序(Heap sort)
背景知识什么是堆堆就是数据结构中的完全二叉树,是一种非线性数据结构。可以把堆看作一个数组,也可以被看作一个完全二叉树,通俗来讲堆其实就是利用完全二叉树的结构来维护的一维数组。堆的类型按照堆的特点可以分为大顶堆和小顶堆。如下图所示。大顶堆(max heap)跟节点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆(大顶堆)。大顶堆要求根节点的关...原创 2020-02-10 22:23:26 · 4774 阅读 · 1 评论 -
排序——快速排序(Quick sort)
概况快速排序(Quick sort)是对冒泡排序的一种改进。快速排序由C. A. R. Hoare在1960年提出。算法思路通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序算法通过多次比较和交换来实现排序,其排序流程如下:......原创 2020-02-09 20:12:34 · 287118 阅读 · 47 评论 -
排序——归并排序(Merge sort)
1945年,约翰·冯·诺依曼(John von Neumann)发明了归并排序,这是典型的分治算法的应用。定义归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。算法思路归并排序算法有两个基本的操作,...原创 2020-02-09 19:16:13 · 145286 阅读 · 38 评论 -
排序——希尔排序(Shell's sort)
希尔排序概况希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。该方法因D.L.Shell于1959年提出而得名。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算...原创 2020-02-08 23:21:06 · 10310 阅读 · 0 评论 -
排序——插入排序(Insertion sort)
算法思想顾名思义,采用插入的方式,对无序数列进行排序。维护一个有序区,将数据一个一个插入到有序区的适当位置,直到整个数组都有序。即每步将一个待排序的记录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。图示过程初始状态数列的初始值为。先吧首元素 5 作为有序区,此时有序区只有一个元素,如下图所示。第一轮将下一个元素 8 和有序区所有元素...原创 2020-02-06 23:48:24 · 17169 阅读 · 4 评论 -
排序——选择排序(Selection sort)
算法思想第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。图示过程假设一个数列为{6, 3, 5, 7, 0},对该数列进行排序。整个排序过程入下图所示:说明:上图为未优化的选择排序示意图。动画展示说明:此动图为优化后...原创 2020-02-05 15:41:19 · 9496 阅读 · 3 评论 -
排序——冒泡排序(Bubble sort)
定义冒泡排序是一种较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。...原创 2020-02-03 12:40:57 · 12532 阅读 · 0 评论