排序算法
文章平均质量分 79
常见的排序算法
小小兔在普陀山走神啊
三年以来,三十年以来,由此上溯到一千八百四十年人民英雄们永垂不朽!
展开
-
排序 - 快速排序(Quick Sort)
它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。原创 2023-12-22 09:41:32 · 846 阅读 · 0 评论 -
排序 - 插入排序(Insertion Sort)
直接插入排序(Straight Insertion Sort)的基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。原创 2023-12-22 09:41:18 · 377 阅读 · 0 评论 -
排序 - 选择排序(Selection sort)
它的基本思想是: 首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。原创 2023-12-22 09:41:04 · 817 阅读 · 0 评论 -
排序 - 堆排序(Heap Sort)
学习堆排序之前,有必要了解堆!若读者不熟悉堆,建议先了解堆(建议可以通过二叉堆,左倾堆,斜堆,二项堆或斐波那契堆等文章进行了解),然后再来学习本章。我们知道,堆分为"最大堆"和"最小堆"。最大堆通常被用来进行"升序"排序,而最小堆通常被用来进行"降序"排序。鉴于最大堆和最小堆是对称关系,理解其中一种即可。本文将对最大堆实现的升序排序进行详细说明。最大堆进行升序排序的基本思想: ① 初始化堆: 将数列a[1…n]构造成最大堆。② 交换数据: 将a[1]和a[n]交换,使a[n]是a[1…n]中的最大值;原创 2023-12-22 09:40:51 · 772 阅读 · 0 评论 -
排序 - 归并排序(Merge Sort)
根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式。原创 2023-12-22 09:40:31 · 961 阅读 · 0 评论 -
排序 - 桶排序(Bucket Sort)
假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个"桶"。在排序时,逐个遍历数组a,将数组a的值,作为"桶数组r"的下标。当a中数据被读取时,就将桶的值加1。例如,读取到数组a[3]=5,则将r[5]的值+1。原创 2023-12-22 09:40:11 · 322 阅读 · 0 评论 -
算法思想 - 分治算法
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。原创 2023-12-22 09:39:49 · 324 阅读 · 0 评论 -
算法思想 - 动态规划算法
动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。动态规划算法在算法思想中是极为重要的,需要重点掌握。原创 2023-12-22 09:39:22 · 901 阅读 · 0 评论 -
排序 - 基数排序(Radix Sort)
它的基本思想是: 将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。原创 2023-12-21 17:14:35 · 355 阅读 · 0 评论 -
排序 - 冒泡排序(Bubble Sort)
它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾!采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!原创 2023-12-21 17:14:17 · 862 阅读 · 0 评论