基础算法
基础算法与数据结构。
HappyMrSpring
这个作者很懒,什么都没留下…
展开
-
快速排序
转自:http://developer.51cto.com/art/201403/430986.htm坐在马桶上看算法:快速排序算法的精髓在于,跟它一比高数也显得那么生动活泼…。本文由啊哈磊吐槽而成,话说我还是头一次见到这么萌的变量,简直颠覆我对变量这个兵种、对算法这个种族的传统观念。正在被算法欺负吗?快进来看看:作者:啊哈磊来源:51CTO博客|2014-03-03 16:44高...转载 2018-09-28 16:59:07 · 130 阅读 · 0 评论 -
哈希表
概述: 哈希表是一种将键映射到值的数据结构。它用哈希方程来将键映射到小范围的指数(一般为[0..哈希表大小-1])。 两个键冲突为同样指数的几率相对较高并且每次潜在的冲突需要被解决才能维持数据完整。在这个可视化中有一些解决冲突的策略会被高亮: 开放寻址法(线性探测,二次探测 和 双倍散列)以及 分离连接法(即将上线)。 动机: 概述: 散列是一...原创 2018-11-08 18:18:56 · 438 阅读 · 0 评论 -
二叉堆
二叉堆概述(大优先) 概述: 一个(最大)二叉堆是一个具有最大堆特性的完全二叉树。 二叉堆是可用于实现高效优先队列ADT的数据结构之一。在优先队中,每一个元素都有一个优先级并且一个高优先级的元素总是比低优先级的先出头(如果有一样的优先级,像普通队列一样先进先出)。试试点击ExtractMax()来看一个从上面随机的二叉堆中提取最大元素的演示动画。...原创 2018-11-08 18:19:23 · 470 阅读 · 0 评论 -
列表(Llist)
参考:visualgo 五种模式:链表(Linked List),栈(Stack),队列(Queue),双向链表(Double Linked List),双向队列(Double Ended Queue)。 动机: 几乎所有的计算机科学本科专业都会教链表数据结构。原因如下: 它是一个简单的线性数据结构。 做为一个抽象数据类型,它有很广泛的...原创 2018-10-29 16:12:11 · 1864 阅读 · 1 评论 -
基础算法【9】:基数排序RadixSort
转自:http://www.cnblogs.com/skywang12345/p/3603669.html概要本章介绍排序算法中的基数排序。内容包括:1. 基数排序介绍2. 基数排序图文说明3. 基数排序实现3.1 基数排序C实现基数排序介绍 基数排序(Radix Sort)是桶排序的扩展,它的基本思想是:将整数按位数切割成不同的数字,然后按每个位数分别比较。具体做法...转载 2018-10-26 12:59:32 · 249 阅读 · 0 评论 -
基础算法【8】基数排序
基数排序: 假设:如果要排序的项目是大范围但小数位的整数,我们可以将计数排序(Counting Sort)思想与基数排序(Radix Sort)结合起来,以实现线性时间复杂度。 在基数排序中,我们将每个项目排序为一个 w 数字串(如果需要,我们填充小于w数字的前几个零的整数)。 对于最低有效位(最右边)到最高有效位(最左边),我们通过 N 个项目并...原创 2018-11-08 18:17:50 · 213 阅读 · 0 评论 -
基础算法【7】:计数排序CountingSort
计数排序: 假设:如果要排序的项目是小范围的整数,我们可以计算每个整数(在这个小范围内)的出现频率(O(N)),然后通过循环该小范围来按排序顺序输出项目。 在示例数组{2, 3, 8, 7, 1, 2, 2, 2, 7, 3, 9, 8, 2, 1, 4, 2, 4, 6, 9, 2}中,对所有整数都在[1..9]内的示例数组尝试Counting Sort,因此我们只...原创 2018-10-26 11:39:20 · 351 阅读 · 0 评论 -
基础算法【6】不基于比较的排序
O(N)不基于比较的排序算法: 在接下来的幻灯片,我们将讨论两种不基于比较的排序算法: 计数排序和基数排序。 这些排序算法可以通过不比较数组的项目来比时间复杂度为Ω(N log N)的基于比较的排序算法的下限更快。 排序算法的下限: 我们都知道(在这个可视化中也没有证明,因为它需要花费一个小时的讲座来证明),所有基于比较的排序算法都具有Ω(N...原创 2018-11-08 18:16:55 · 1223 阅读 · 0 评论 -
基础算法【5】:快速排序QuickSort
快速排序: 快速排序是另一个分而治之排序算法。 我们将看到,这种确定性的,非随机化的快速排序的版本可能在对手输入中具有O(N2)的很差的时间复杂度,之后再继续随机化的和可用的版本。 疑问:“确定的,非随机化的”指的是什么?指的是枢纽点的选取。 快速排序是分而治之的算法: 划分步骤:选择一个项目 p(称为枢轴点)然后将 a[i....原创 2018-10-25 15:52:14 · 201 阅读 · 0 评论 -
基础算法【4】:归并排序MergeSort
归并排序: 给定一个N个项目的数组,归并排序将: 将每对单个元素(默认情况下,已排序)归并为2个元素的有序数组, 将2个元素的每对有序数组归并成4个元素的有序数组,重复这个过程......, 最后一步:归并2个N / 2元素的排序数组(为了简化讨论,我们假设N是偶数)以获得完全排序的N个元素数组。 这只...原创 2018-10-23 16:11:02 · 627 阅读 · 0 评论 -
基础算法【3】:插入排序InsertionSort
插入排序: 插入排序类似于大多数人安排扑克牌的方式: 从你手中的一张牌开始, 选择下一张卡并将其插入到正确的排序顺序中, 对所有的卡重复上一步。 分析: 外循环执行N-1次,这很明显。 但内循环执行的次数取决于输入: 在最坏的情况下,数组被反向排序并且(a [j]...原创 2018-10-23 12:13:20 · 196 阅读 · 0 评论 -
基础算法【2】:选择排序SelectionSort
选择排序: 给定 N 个项目和 L = 0 的数组,选择排序将: 在 [L ... N-1] 范围内找出最小项目 X 的位置, 用第 L 项交换X, 将下限 L 增加1并重复步骤1直到 L = N-2。 在不失普遍性的情况下,我们也可以实现反向的选择排序:找到最大项目 Y 的位置并将其与最后一个项目交换...原创 2018-10-23 10:24:36 · 135 阅读 · 0 评论 -
基础算法【1】:冒泡排序BubbleSort
参考:https://visualgo.net/zh/ 冒泡排序: 给定一个N个元素的数组,冒泡法排序将: 如果元素大小关系不正确,交换这两个数(在本例中为a> b), 比较一对相邻元素(a,b), 重复步骤1和2,直到我们到达数组的末尾(最后一对是第(N-2)和(N-1)项,因为我们的数组从零开始) ...原创 2018-10-22 16:31:00 · 368 阅读 · 0 评论