
算法
文章平均质量分 74
埃泽漫笔
OceanBase开源项目ODC(OceanBase Developer Center)的核心贡献者,Github地址:https://github.com/oceanbase/odc,希望大家能赏脸支持下我们OceanBase公司的开源项目,点亮一颗小星星就行。
Maven中央仓库OceanBase开源组件 https://central.sonatype.com/artifact/com.oceanbase/db-browser 和 https://central.sonatype.com/artifact/com.oceanbase/ob-sql-parser 的核心贡献者。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法思想 - 回溯算法
回溯算法(backtracking algorithm)是一种通过穷举来解决问题的方法,它的核心思想是从一个初始状态出发,暴力搜索所有可能的解决方案,当遇到正确的解则将其记录,直到找到解或者尝试了所有可能的选择都无法找到解为止。回溯算法通常采用“深度优先搜索”来遍历解空间。在“二叉树”章节中,我们提到前序、中序和后序遍历都属于深度优先搜索。接下来,我们利用前序遍历构造一个回溯问题,逐步了解回溯算法的工作原理。例题一给定一棵二叉树,搜索并记录所有值为7的节点,请返回节点列表。原创 2024-12-02 23:03:05 · 1216 阅读 · 0 评论 -
算法思想 - 分治算法
分治(divide and conquer),全称分而治之,是一种非常重要且常见的算法策略。分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。分治通常基于递归实现,包括“分”和“治”两个步骤。分(划分阶段):递归地将原问题分解为两个或多个子问题,直至到达最小子问题时终止。治(合并阶段):从已知解的最小子问题开始,从底至顶地将子问题的解进行合并,从而构建出原问题的解。原创 2024-11-26 23:10:38 · 2122 阅读 · 0 评论 -
排序 - 选择排序(Selection sort)
它的基本思想是: 首先在未排序的数列中选出最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续选出最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。原创 2024-11-17 23:28:34 · 608 阅读 · 0 评论 -
排序 - 冒泡排序(Bubble Sort)
它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾!采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!原创 2024-11-17 23:27:38 · 423 阅读 · 0 评论 -
排序 - 插入排序(Insertion Sort)
直接插入排序(Straight Insertion Sort)的基本思想是: 把n个待排序的元素看成为一个有序表和一个无序表。开始时有序表中只包含1个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,重复n-1次可完成排序过程。原创 2024-11-18 23:55:51 · 209 阅读 · 0 评论 -
排序 - Shell排序(Shell Sort)
希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。它的基本思想是: 对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中;然后,对各组内的元素进行直接插入排序。这一趟排序完成之后,每一个组的元素都是有序的。然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。原创 2024-11-19 02:00:26 · 812 阅读 · 0 评论 -
排序 - 快速排序(Quick Sort)
快速排序(Quick Sort)使用分治法算法思想。它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。原创 2024-11-20 23:54:42 · 1186 阅读 · 0 评论 -
排序 - 归并排序(Merge Sort)
将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(Merge Sort)就是利用归并思想对数列进行排序。根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式。原创 2024-11-19 23:28:53 · 992 阅读 · 0 评论 -
排序 - 堆排序(Heap Sort)
堆排序是指利用堆这种数据结构所设计的一种排序算法,可以看做是选择排序的优化。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点我们知道,堆分为"最大堆"和"最小堆"。最大堆通常被用来进行"升序"排序,而最小堆通常被用来进行"降序"排序。鉴于最大堆和最小堆是对称关系,理解其中一种即可。本文将对最大堆实现的升序排序进行详细说明。最大堆进行升序排序的基本思想:① 初始化堆: 将数列a[1...n]构造成最大堆。原创 2024-11-18 01:33:02 · 861 阅读 · 0 评论 -
排序 - 桶排序(Bucket Sort)
桶排序(Bucket Sort)是分治策略的一个典型应用。它通过设置一些具有大小顺序的桶,每个桶对应一个数据范围,将数据平均分配到各个桶中;然后,在每个桶内部分别执行排序;最终按照桶的顺序将所有数据合并。“基于比较的排序算法”,它们通过比较元素间的大小来实现排序。此类排序算法的时间复杂度无法超越 O(nlogn)。桶排序,它们的时间复杂度可以达到线性阶。原创 2024-11-24 20:49:51 · 513 阅读 · 0 评论 -
排序 - 计数排序(Counting Sort)
计数排序(counting sort)通过统计元素数量来实现排序,通常应用于整数数组。原创 2024-11-21 23:58:38 · 786 阅读 · 0 评论 -
排序 - 基数排序(Radix Sort)
基数排序(Radix Sort)是计数排序(Counting Sort)的扩展它的基本思想是: 将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法是: 将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。原创 2024-11-24 20:51:06 · 641 阅读 · 0 评论 -
10种常见排序算法总结
快排可能存在最坏情况,需要把枢轴值选取得尽量随机化来缓解最坏情况下的时间复杂度。插入排序对于近乎有序的数据处理速度比较快,复杂度有所下降,可以提前结束。gap序列的构造有多种方式,不同方式处理的数据复杂度可能不同。对于整个数组或非最左侧 size > 4096,有序度高。不稳定:排序前后有可能会将值相同的元素的顺序打乱。堆排序的辅助性较强,理解前先理解堆的数据结构。稳定:排序前后不会将值相同的元素的顺序打乱。需要额外的O(n)的存储空间。交换次数一般少于冒泡。递归次数超过 384。递归次数超过 384。原创 2024-11-24 20:55:43 · 1003 阅读 · 0 评论