每天学点数据结构与算法
文章平均质量分 89
zouliping123
这个作者很懒,什么都没留下…
展开
-
几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
最近决定每天学点数据结构与算法,写博客来督促自己继续学习~ 以下的每个排序的写法格式基本按照先介绍基本思想,再描述具体过程,最后是具体代码。关于复杂度等问题后续更新。如有写的不严谨的地方,欢迎指出,相互交流。 希尔排序 基本思想:将一组数据按照一定的步长分组,进行直接插入排序,然后再缩小步长,再排序,直到步长为1,再进行一次排序,就得到了有序序列。 以下面一组数据为例: {原创 2013-04-25 15:10:21 · 3133 阅读 · 0 评论 -
线性排序算法(计数排序,基数排序,桶排序)分析及实现
写在前面 大家都知道的是,基于比较的排序算法的时间复杂度的下界是 O(n log(n))。这一结论是可以证明的,所以在基于比较的算法中是找不到时间复杂度为 O(n)的算法的。这时候,非基于比较的算法,如计数排序、基数排序和桶排序,是可以突破这个下界的。但是,非基于比较的排序的使用限制却是较多的,如计数排序仅能对较小整数进行排序,且要求排序的数据的规模不能过大;基数排序可以对长整数进行排序,但是不原创 2013-05-18 18:51:08 · 5416 阅读 · 0 评论 -
二叉树的建立(根据遍历结果构建)、遍历(非递归)和搜索
定义与性质 二叉树的每个节点至多只有两棵子树,二叉树的子树有左右之分,不可颠倒。二叉树的第i层至多有2^(i-1)个节点;深度为k的二叉树的节点至多有2^k - 1个节点;对任一个二叉树,其叶子节点的个数为n,度为2的节点个数为m,n = m + 1 。(摘自wiki) 节点定义 typedef struct BinaryTreeNode { char value; stru原创 2013-05-04 16:45:32 · 1409 阅读 · 0 评论 -
链表基础及常见面试题
基础知识 链表是一种很常见的数据结构,在每个节点都保存了指向下一个节点的指针。与顺序表相比,链表插入元素的复杂度是O(1),查找一个节点或者访问特定节点编号的元素的复杂度是O(n);顺序表插入元素的复杂度是O(n),而查找的复杂度是O(1)。使用链表可以不必事先知道数据的大小,但是增加了指针域,加大了内存的开销。链表有三种类型:单向链表、双向链表和循环链表。 链表节点的定义 ty原创 2013-05-14 18:16:31 · 1378 阅读 · 0 评论 -
C/C++位运算技巧
预备知识 对于位运算,大家都很熟悉,基本的位操作有与、或、非、异或等等。在面试中经常会出现位运算相关的题,所以我就做了简单的整理,参考了很多写的很好的博客及书籍。 现在简单说一下,移位运算。 左移运算:x 右移运算:x >> y。将x右移y位,这需要区分x是有符号数还是无符号数。在x是无符号数时,只需将x的最右边的y位丢弃,在左边补上y个0。在x是有符号数时,又分为x是正数还是负数。正数原创 2013-06-01 14:40:14 · 21238 阅读 · 5 评论