随笔分类 -  算法导论

摘要:快速排序对于n个数的输入数组来说,快速排序是一种最坏情况时间复杂度为O(n2)的排序算法,虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序中最好的选择,因为它的平均性能非常好:它的期望时间复杂度是O(nlgn),而且O(nlgn)中隐含的常数因子非常小。1、快速排序的描述 快速排序算法采用的... 阅读全文
posted @ 2014-11-03 11:05 Jessica程序猿 阅读(418) 评论(0) 推荐(0)
摘要:1、概述 队列是一种满足先进先出(FIFO)的数据结构,数据从队列头部取出,新的数据从队列尾部插入,数据之间是平等的,不存在优先级的。这个就类似于普通老百姓到火车站排队买票,先来的先买票,每个人之间是平等的,不存在优先的权利,整个过程是固定不变的。而优先级队列可以理解为在队列的基础上给每个数据赋一... 阅读全文
posted @ 2014-11-02 20:59 Jessica程序猿 阅读(303) 评论(0) 推荐(0)
摘要:一 堆 堆给人的感觉是一个二叉树,但是其本质是一种数组对象,因为对堆进行操作的时候将堆视为一颗完全二叉树,树种每个节点与数组中的存放该节点值的那个元素对应。所以堆又称为二叉堆,堆与完全二叉树的对应关系如下图所示:二叉堆可以分为两种形式:最大堆和最小堆。在这两种堆中,结点的值都要满足堆的性质。在最大堆... 阅读全文
posted @ 2014-11-02 20:40 Jessica程序猿 阅读(307) 评论(0) 推荐(0)
摘要:刚看到堆排序,顺便记录一下关于树的一些基本概念:前言前面介绍的栈、队列都是线性结构(linear structure)。而树是非线性结构(non-linear structure)。因此,树中的元素之间一般不存在类似于线性结构的一对一的关系,更多地表现为多对多的关系。直观地看,它是数据元素(在树中称... 阅读全文
posted @ 2014-11-01 23:23 Jessica程序猿 阅读(1917) 评论(0) 推荐(0)
摘要:最大子数组问题方法一:暴力求解方法我们可以很容易地设计出一个暴力方法来求解本问题:简单地尝试没对可能的子数组,共有O(n2)种#includeusing namespace std;#define INT_MIN 0x80000000int main(){ int arr[10]={9,8,-... 阅读全文
posted @ 2014-11-01 21:14 Jessica程序猿 阅读(519) 评论(0) 推荐(0)
摘要:递归的总结:http://www.cnblogs.com/Bob-FD/archive/2013/04/10/3012568.html(其中包含一些递归的资料,有时间看看,递归实在是不好理解)C通过运行时堆栈支持递归函数的实现。递归函数就是直接或间接调用自身的函数。 许多教科书都把计算机阶乘和菲波那... 阅读全文
posted @ 2014-11-01 19:41 Jessica程序猿 阅读(857) 评论(0) 推荐(0)
摘要:2.1 插入排序C++实现:#includeusing namespace std;void InsertSort(int arr[],int n){ int i,j,key; for(i=1;i=0&&keyusing namespace std;void Merge(int arr[... 阅读全文
posted @ 2014-11-01 11:25 Jessica程序猿 阅读(243) 评论(0) 推荐(0)