
十大经典排序算法
总结常见的十大经典排序算法,代码实现用C++
qq_34405786
这个作者很懒,什么都没留下…
展开
-
Introduction-十大经典排序算法
本系列算法整理自:https://github.com/hustcc/JS-Sorting-Algorithm;https://www.runoob.com/w3cnote/ten-sorting-algorithm.html 加自己的总结 排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是...原创 2020-04-09 21:55:57 · 157 阅读 · 0 评论 -
1.冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。 冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这...原创 2020-04-09 23:46:14 · 166 阅读 · 0 评论 -
2.选择排序
基本思路:每次选取剩余元素中的最小元素,添加有序序列的末尾。 选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 1、算法步骤 (1)首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置 (2)再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 (...原创 2020-04-10 00:33:59 · 91 阅读 · 0 评论 -
3.插入排序
基本思路:扑克牌的摸牌、理牌。 基本操作:将一个记录插入到已经排好序的有序表中,得到一个新的、记录数增1的有序表。 可做优化,找插入位置时采用折半查找。 1、算法步骤 (1)将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 (2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插...原创 2020-04-10 10:37:41 · 94 阅读 · 0 评论 -
4.希尔排序
希尔排序是第一批突破O()的排序算法之一。 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: (1)插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率; (2)但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位; 希尔排序的基本思...原创 2020-04-12 13:16:50 · 252 阅读 · 0 评论 -
5、堆排序
堆排序是对简单选择排序的升级,利用堆这种数据结构所设计的一种排序算法。 堆是一个完全二叉树的结构,子结点的键值或索引总是小于(或者大于)它的父节点。分为: (1)大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列; (2)小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列; 大(小)顶堆删除堆顶元素,将剩下的元素再次调成成大(小)顶堆,时间复杂度...原创 2020-04-13 00:55:40 · 175 阅读 · 0 评论 -
6、归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法: (1)自上而下的递归(所有的递归都可以用迭代重写,故有第二种方法) (2)自下而上的迭代 归并排序是建立在合并两个有序数列的基础上的,如何合并两个有序的数列? 首先申请两个数列长度和的空间Tem...原创 2020-04-25 11:53:21 · 255 阅读 · 0 评论 -
7、快速排序
快速排序在时间复杂度为为O(N*logN)的几种排序方法中效率较高,主要采用分治法的排序思想。 快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。 由于关键词的比较和交换是跳跃的,所以快速排序是一种不稳定的排序。 1、算法步骤 1)先从待排数列中找到一个数作为基准数(主元); 2原创 2020-05-10 23:37:59 · 620 阅读 · 0 评论 -
8、计数排序
计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 计数排序的基本思想是:对每一个输入的元素X,确定小于X的元素个数。利用这一信息。就可以直接把X放到它在输出数组的位置上了。 计数排序的特点:当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。 由于用来计数的数组C的长度取决于待排序数组中数据的范围(等于待排序数组的最大值与原创 2020-06-26 21:42:10 · 188 阅读 · 0 评论 -
9、桶排序
桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点: (1)在额外空间充足的情况下,尽量增大桶的数量 (2)使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中 同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。 1、思路: 将N个待排序数字分配到K个桶中(保证均匀),再将每个桶中的数字用插入排序方法排序,最后将每个桶中的数字连接起来。 2、图片演示 3、C++代码实现 #i.原创 2020-06-27 17:57:34 · 188 阅读 · 0 评论