![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
摩尔の
主要方向C/C++后台开发,目前正在向软件驱动开发转型。
什么都懂一点,又什么都不懂。
展开
-
排序算法——归并排序
1.归并排序是什么? 归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 2.描述 归并排序算法的原理如下: 把长度为n的输入序列分成两个长度为n/2的子序列;; 对这两个子序列分别采用归并排序; 将两个排序好的子序列合并成一个最终的排序序列。 3.示例 递归版 // 归并排序 template.原创 2021-08-27 14:40:56 · 242 阅读 · 0 评论 -
排序算法——希尔排序
1.希尔排序是什么? 希尔排序(Shell’s Sort)是插入排序的一种,第一个突破O(n2)的排序算法,是直接插入排序算法的一种更高效的改进版本。 2.描述 希尔排序算法的原理如下: 将数列按某个增量seq分成若干组(初次取序列的一半为增量,以后每次减半,直到增量为1); A[0],A[seq],D[2*seq],…… A[1],A[seq+1],D[2*seq+1],…… …… A[d-1],A[2*seq-1,D[3*seq-1],…… 对步骤一中的全部分组进行插入排序; 增量.原创 2021-08-27 11:22:11 · 124 阅读 · 0 评论 -
排序算法——桶排序
1.基数是什么? 桶排序(radix sort)属于“分配式排序”(distribution sort),顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 2.描述 桶排序算法的原理如下: 遍历序列,取出权重因子的最大长度(若为字符串,则radix=字符串最大长度)。 按照权重因子的优先级进行排序。 将步骤2中排序的数组放入原数组。 权重因子+1,重复步骤2-3,直到权.原创 2021-08-31 15:59:47 · 207 阅读 · 0 评论 -
排序算法——快速排序
1.快速排序是什么? 快速排序(Quicksort)是对冒泡排序算法的一种改进。 2.描述 快速排序算法的原理如下: 首先设定一个分界值,通过该分界值将数组分成左右两部分。 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 分别对左右两侧,重复步骤1-2。 3.示例 template <typename T> inline void quickSortRecursive(T.原创 2021-08-27 17:18:25 · 70 阅读 · 0 评论 -
排序算法——冒泡排序
1.冒泡排序是什么? 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,依次比较两个相邻元素,如果顺序错误则进行交换。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列)。 2.描述 冒泡排序算法的原理如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复.原创 2021-08-26 18:04:52 · 177 阅读 · 0 评论 -
排序算法——基数排序
1.基数排序是什么? 基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 2.描述 基数算法的原理如下: 遍历序列,取出权重因子的最大长度(若为字符串,则radix=字符串最大长度)。 按照权重因子的优先级进行排序。 将步骤2中排序的数组放入原数组。 权重因子+1,重复步骤2-3,直到权重因子使用完毕。 3.示例 /* * 用于取得整数最大值的位数 */.原创 2021-08-31 09:42:55 · 109 阅读 · 0 评论 -
排序算法——堆排序
1.堆排序是什么? 堆排序是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 2.描述 堆排序算法的原理如下: 将堆的末端子节点作调整,使得子节点永远小于(大于)父节点。 将堆顶元素A[0]与最后一个元素A[n-1]交换,此时得到新的堆区(A1,A2,……An-1)和新的有序区(An),且满足A[1,2…n-1]<=A[n]。 对堆区重复进行步骤1-2。 3.示例 /* * 堆排序 .原创 2021-08-27 18:24:51 · 48 阅读 · 0 评论 -
排序算法——计数排序
1.基数排序是什么? 计数排序是一个非基于比较的排序算法。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(nlog(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(nlog(n)), 如归并排序,堆排序)。 2.描述 基数排序算法的原理如下: 找出待排序的数组中最大和最小的元素。 统计数组中每个值为i的元素出现的次数,存入数组count的第.原创 2021-08-27 18:56:45 · 169 阅读 · 0 评论 -
排序算法——插入排序
1.插入排序是什么? 插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。 2.描述 插入排序算法的原理如下: 从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素A,在已经排序的元素序列S中从后向前扫描; 若元素S[i.原创 2021-08-26 18:32:22 · 269 阅读 · 0 评论 -
排序算法——选择排序
1.选择排序是什么? 选择排序是一种简单直观的排序算法。它的工作原理:首先在序列中找到最小(大)元素,存放到排序序列的起始位置,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 2.描述 选择排序算法的原理如下: 初始状态:无序区为R[1…n],有序区为空; 第i回排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1…i-1]和R(i…n)。该回排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换.原创 2021-08-26 18:18:53 · 114 阅读 · 0 评论