涛涛的学习笔记之算法导论
涛涛要学习
这个作者很懒,什么都没留下…
展开
-
比较排序之插入和归并排序
排序之插入和归并插入排序: 对于少量的元素的排序,插入排序是一个很有效的算法。其原理很简单,类似于我们打扑克的时候,开始时,我们左手为空并且桌上的牌面向下,然后,我们每次从桌子上拿走一张牌并将它插入左手的正确位置,为了找到正确位置,我们从右往左将它与每张牌进行比较。 对于数组来说,我们就是从第二个元素开始,在该元素左边建立一个排好序的子数组,然后对右边的元素进行依次遍历,将它们插入到左原创 2016-09-17 21:01:12 · 2360 阅读 · 0 评论 -
比较排序之堆排序和快速排序
堆排序 堆是一个数组,它可以被看成一个近似的完全二叉树,树上的每一个结点对应数组中的一个元素。除了最底层外,改树是完全充满的,而且是从左往右填充的。 堆可以分成两种形式:最大堆和最小堆。 在堆排序算法中,我们使用的是最大堆。最小堆一般用于构建优先队列。 我们知道,在最大堆中,最大堆性质是指除了根以外的所有结点i都要满足: A[parent(i)]>=A[i]原创 2016-09-17 22:24:37 · 690 阅读 · 0 评论 -
以空间换时间的计数排序
计数排序 我们前面学习的插入、归并、堆和快速排序都是比较排序,即在排序的最终结果中,各元素的次序依赖于它们之间的比较。我们说过比较排序有时间下界,即nlgn,如果我们需要一个时间复杂度为O(n)的排序算法,要怎么办? 计数排序就是比较好的选择。计数排序的基本思想是:对每一个输入的元素x,确定小于x的元素个数。利用这一信息可以直接把x放到它的输出数组中的位置上。 这就要求我们需要原创 2016-09-18 10:22:37 · 877 阅读 · 0 评论 -
基于快排的选择算法:返回数组中第k小的数
快速排序的随机化版本 我们上篇对快排继续了讨论,我们知道它的平均性能是nlgn,但是我们分析的前提是:输入数据的所有排列都是等概率的。但是在实际的工程中,这个假设并不会总是成立,当面对大数据输入的快排时,我们所分析的平均性能不能实现,所以,我们只能通过显性的对输入数据进行重新排列,来使得算法实现的随机化。 基于随机化的快排:int randomized_partition(int *原创 2016-09-22 20:11:53 · 495 阅读 · 0 评论