排序
文章平均质量分 72
Skrrapper
C/C++领域创作者、CSDN校园主理人、阿里云专家博主
编程之大,无奇不有。让我们共同学习,一起进步!
展开
-
【数据结构】排序算法系列——计数排序(附源码+图解)
它主要进行的是一个分类的操作,将相同的数分在一类,在进行完分类后,再针对分类出来的代表数进行整体排序。但实际上这样的排序会有一个缺陷——如果相同的数过少,或者说整个数据组的同一性过小,那么实际上分类过程的意义也就会随之变小——从而还是主要依靠排序来进行算法的完成。事实上,它的代码中完全没有输人元素之间的比较操作。计数排序的一个重要性质就是它是稳定的:具有相同值的元素在输出数组中的相对次序与它们在输人数组中的相对次序相同。也就是说,对两个相同的数来说,在输入数组中先出现的数,在输出数组中也位于前面。原创 2024-09-28 08:18:15 · 383 阅读 · 4 评论 -
【数据结构】排序算法系列——归并排序(附源码+图解)
它的特点在于并不是一开始就将整个数组进行归类和调整,而是以一定的间隔数分成多次小的排序,最后再逐渐将小的排序的范围变大,最后变大到整个数组时,已经完全有序。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。界定比较的数据个数:一般按照2的倍数增长:两个互相比较、四个互相比较、八个互相比较…总的来说,分治法也可以被称作一种算法,它是一种基于递归的、“分而治之”的算法思想。3.合并这些子问题的解成原问题的解。原创 2024-09-24 23:16:04 · 1147 阅读 · 0 评论 -
【数据结构】排序算法系列——快速排序(附源码+图解)
接下来我们将要介绍的是排序中最为重要的算法之一——快速排序。快速排序(英语:Quicksort),又称分区交换排序(partition-exchange sort),最早由东尼·霍尔提出。快速排序通常明显比其他算法更快,因为它的内部循环可以在大部分的架构上很有效率地达成。我们直接来分析它的算法思想。我们首先直接来看算法步骤,再分析其原理和目的具体的动画分析可以看这:快速排序算法动画演示_哔哩哔哩_bilibili我们首先来对基准值的选择进行分析:通常我们都会选择最左边或者最右边的基准值,这是最不需要多想的选原创 2024-09-18 18:05:43 · 1432 阅读 · 0 评论 -
【数据结构】排序算法系列——堆排序(附源码+图解)
但是当我们根据[[二叉树]]的遍历来进行输出时,会发现同一个父节点的子节点之间以及其中一个子节点的子节点实际上是无序的,例如60和10,它们之间是大于的关系;),然后重新构造堆,那么此时的第二个根节点就仅次于第一个根节点的大小,这么以此类推,最终将所有节点根据大、次大、第三大的顺序排序在数组中,那么也就成功构建出了有序的数组。根据堆的有序性和完全二叉树的性质,我们得知将其用在排序上是可行的,并且还能够有效减少重复比较的次数,这何乐而不为呢?可惜的是,这样的操作并没有把每一趟的比较结果保存下来,原创 2024-09-14 14:05:07 · 674 阅读 · 1 评论 -
【数据结构】排序算法系列——冒泡排序(附源码+图解)
冒泡排序(Bubble sort)的算法思想也是较为容易去理解的,我们参照冒泡这一物理现象,会发现,往往大的气泡都会往上运动,而小的气泡往往都在下方。冒泡排序的名字也就是这么由来的。它在数据较少或者较为有序的时候,可以有很好的效率,但是一旦数据多起来或者较为无序,那么需要重复的次数就会大幅度增加,从而后期乏力,效率降低。接下来我们要介绍的是排序算法中极为标志性,并且经常在教材中作为经典案例出现的——冒泡排序。在序列完全有序时,冒泡排序只需遍历一遍数组,不用执行任何交换操作,时间复杂度为。原创 2024-09-11 10:30:58 · 915 阅读 · 0 评论 -
【数据结构】排序算法系列——选择排序(附源码+图解)
选择排序的思想与插入排序其实有异曲同工之处,它们都会对数据进行比较和交换,但是它们也还是有很大的差别:插入排序是两两元素之间进行比较,而选择排序是将最值的元素同其他元素依次进行比较,从而按照最大(或最小)、第二大、第三大这样的顺序进行数组的重组。选择排序的最优时间复杂度、平均时间复杂度和最坏时间复杂度均为。原创 2024-09-09 08:09:25 · 565 阅读 · 4 评论 -
【数据结构】排序算法系列——希尔排序(附源码+图解)
希尔排序实际上是个相当复杂的排序算法,这主要是跟它的步长序列gap到底该如何取、后续应该减小有关。时,数组已经接近有序的了,就整体而言,最后一次整体的插入排序就可以大大提高效率——我们从插入排序的时间复杂度分析也可以看出,可以看到每次减小gap的规律是将原先的gap/2,但事实上这只是其中一种处理方法,并不说明这是最优解。,使得平均情况下的时间复杂度能够在O(n^1.3)左右,而不好的选择则可能导致接近最坏情况的性能。中,我们会将整体数据一分为多份,进行散布式的插入排序,这时候每一个子序列之间的间隙就是。原创 2024-09-07 09:36:10 · 1389 阅读 · 52 评论 -
【数据结构】排序算法系列——插入排序(附源码+图解)
我们看图解中,单次比较过程中,拿出来比较的数只会同它左侧的数进行比较,而被比较的数随着比较结束也会根据具体情况向后移动或者是进行交换,向后移动的过程也称为——补位。在全程的比较中,随着补位和交换的进行,进行比较操作的数只会与曾经进行过比较操作的数进行比较——简单来说,就是比较与被比较是交替进行的。我们总结插入排序算法的核心思路——插入排序的算法思想其实很容易理解,它秉持着一个不变的循环:比较->交换->比较->交换…插入排序的最坏时间复杂度和平均时间复杂度都为。插入排序的最优时间复杂度为。原创 2024-09-05 16:57:35 · 452 阅读 · 4 评论 -
【数据结构】排序算法系列——序言(附源码+图解)
在《算法导论》这本经典的算法学习中,我们可以看到“排序”二字的出现频率极高,更是直接拿出一整章节来对其中的快速排序、堆排序等进行讲解。了解一种算法的重要程度,我们可以直接在这本书中所占的权重来粗略得知。在维基百科中,对排序算法的解释是这样的。排序算法(英语:Sorting algorithm)是一种将一组特定的数据按某种顺序进行排列的算法。简单来说,就是将一堆杂乱的数据处理成有序的数据。我们在进行排序的时候必须遵循两个原则:输出的结果一般是递增或者是递减序列,这里的递增递减既可以代表着“有序”二字;原创 2024-09-04 17:33:50 · 966 阅读 · 45 评论