数据结构
Mlong54
这个作者很懒,什么都没留下…
展开
-
排序算法之快速排序
快速排序:其根本思想是基于分治法的,每次从待排序的序列中找出一个数记为p,将序列中所有比p大的数字放在p后面,将所有比p小的数放在p前面,再对p左右两边的子序列执行上述操作,直到子序列的长度为1(一个数一定有序),最后返回的序列就是有序序列。快排相关: 空间复杂度:因为快排是基于递归的,所以需要一个递归栈来保存每层的调用信息,平均情况为O(logn),最差的情况下为O(n) 时间复杂度:当原始序列基原创 2016-09-08 12:01:37 · 525 阅读 · 0 评论 -
排序算法之直接插入排序(JAVA)
插入排序的思想:每次讲一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中,直到所有记录全部插入完成。直接插入排序:我们可以将数组的第一个元素看做已经排好序的子序列,这样从数组的第二个元素开始遍历,依次向排好序的子序列做插入排序操作。 时间复杂度:O(n^2) 空间复杂度:O(1) 稳定性:每次插入元素时,都是从后向前比较移动,不会出现相同元素相对位置发生变化,所以直接插入排序是稳定的排序原创 2016-09-08 10:52:21 · 809 阅读 · 0 评论 -
排序算法之选择排序
选择排序:一种非常简单而且容易理解的排序,每次遍历去寻找当前序列的最小值然后将最小值放在当前序列的第一位,如此往复,直到序列遍历完毕。简单排序: 空间复杂度:O(1) 时间复杂度:O(N^2) 稳定性:不稳定 代码如下: public static void sort(int[] nums, int length) { for(int i=0; i<length; i++)原创 2016-09-08 15:02:43 · 471 阅读 · 0 评论 -
排序算法之归并排序
我们在这里主要探讨二路归并排序: 归并的意思是将两个及两个以上的有序表组合成一个新的有序表。 实现的方法是:对两个有序的序列进行遍历并一一比较两个序列当前元素的大小值,假定这两个序列都是升序的,我们要将这两个序列合并成一个升序的,只需要依次去两个序列中的较小值存入新的序列表中,直到两个序列都为空后,我们就得到了合并后的新的有序序列。归并排序: 空间复杂度:需要辅助空间存储合并后的序列,大小为n,原创 2016-09-08 15:20:59 · 1061 阅读 · 0 评论 -
排序算法之希尔排序-优化后的插入排序
希尔排序的思想:将待排序的序列分成若干个子序列(由某一分量相隔的元素组成),分别对若干个子序列进行直接插入排序,之后依次缩小分量直到整个序列基本有序,再对整个序列进行直接插入排序,基于插入排序在基本有序的序列中效率极高,因此可以提高直接插入排序的效率。建议看希尔排序前,先看明白直接插入排序!!!关于希尔排序的各项信息: 空间复杂度:O(1) 时间复杂度:由于希尔排序的时间复杂度依赖于增量序列的函数,原创 2016-09-08 11:34:48 · 1571 阅读 · 0 评论 -
LeetCode-617. Merge Two Binary Trees
题目链接:617. Merge Two Binary Trees 题目意思很简单:给你两个二叉树,将两个二叉树合并,合并的规则是如果某一个点是重合的,将它们的值相加,在某一个节点二叉树a有值而b没有值,则用a的值作为合并后二叉树在该节点的值。这道题说难也不难,说不难也能让人头疼,思路上来说很简单,但要实现代码的时候还是略有些繁琐,也不能用繁琐来说,应该用复杂吧。 先上代码:# Definitio原创 2017-09-12 16:31:48 · 222 阅读 · 0 评论