
数据结构与算法分析系列
liu_wenbin
java developer
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
初级排序算法(选择、插入、冒泡排序)
初级排序算法初级排序算法选择排序插入排序冒泡排序选择排序1、算法思想: 将待排序序列分为两部分,一部分为有序序列,另一部分为无序序列。第一趟:从a[0]到a[n-1]中找到最小的数a[i],然后将a[i]与a[0]交换,第二趟:从a[1]到a[n-1]中找到最小的数a[j],然后将a[j]与a[1]交换,第三趟:从a[2]到a[n-1]中找到最小的数a[k],然后将a[k]与a[2]交换原创 2017-01-09 14:36:33 · 429 阅读 · 0 评论 -
二叉树遍历几种常见方式
前序遍历递归版本public List<Integer> preorderTraversal(TreeNode root) { List<Integer> res = new LinkedList<Integer>(); preHelper(root,res); return res; }public void preHelper(TreeN原创 2017-08-16 23:00:39 · 659 阅读 · 0 评论 -
数组与字符串
大家都知道什么是数组与字符串,这里不再累述。重点放在数据结构相关的一些技巧和问题的总结上。请注意,数组问题与字符串问题往往是相通的。很多数组问题都可以以字符串的形式出现,反之亦然。散列表散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称原创 2017-03-25 12:44:01 · 534 阅读 · 0 评论 -
二叉查找树
定义二叉查找树(Binary Search Tree),也称二叉搜索树,是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;任意节点的左、右子树也分别为二叉查找树;没有键值相等的节点。二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(log n)。原创 2017-03-22 21:19:09 · 225 阅读 · 0 评论 -
链表
概念链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。创建链表下面的代码实现了基本的原创 2017-03-28 16:44:29 · 286 阅读 · 0 评论 -
经典排序算法之:堆排序
背景及原理1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了著名的堆排序算法( Heap Sort )。堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的原创 2017-02-21 13:38:30 · 421 阅读 · 0 评论 -
经典排序算法之:快速排序
背景及原理:快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。算法思路:基本思路:快速排序使用分治法(Divide and conquer)策略來把一个序列分為兩个子序列。步驟原创 2017-01-12 11:37:26 · 544 阅读 · 0 评论 -
经典排序算法之:希尔排序
1,原理:希尔排序算法是按其设计者希尔(Donald Shell)的名字命名,该算法由1959年公布,是插入排序的一种更高效的改进版本。它的做法不是每次一个元素挨一个元素的比较。而是初期选用大跨步(增量较大)间隔比较,使记录跳跃式接近它的排序位置;然后增量缩小;最后增量为 1 ,这样记录移动次数大大减少,提高了排序效率。希尔排序对增量序列的选择没有严格规定。希尔排序是基于插入排序的以下两点性质而提出原创 2017-01-10 11:09:04 · 569 阅读 · 0 评论 -
经典排序算法之:归并排序
1,背景及原理归并排序(英语:Mergesort),是建立在归并操作上的一种有效的排序算法,效率为O(nlogn)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法的一个非常典型的应用,且各层分治递归可以同时进行。2,算法思路基本思路归并排序就是先递归地分解数组,再合并数组。下面是实现过程:首先考虑下如何将二个已经排好序的数列合并。这个很简单,只要从比较二个数列的第一个数,谁小就先取谁,原创 2017-01-11 00:45:44 · 387 阅读 · 0 评论 -
序列化和反序列化BST
1 序列化:参考上一篇博客提到的前序遍历二叉树的方法,不难得出序列化BST的方法。其实就是通过前序遍历,将遍历到的节点依次存到字符串里面。2反序列化先将待反序列化的字符串内的元素按顺序存到队列内;将跟节点设为队列的头元素;遍历队列,找到大于根节点的元素,并以此为分界,分别递归调用队列的左区间和右区间;左区间返回的值作为跟节点的左孩子,右边返回的值作为根节点的右孩子。代码实现如下:publ原创 2017-08-17 17:52:44 · 350 阅读 · 0 评论