
Java算法与数据结构
夏倩倩
知足且上进,温柔且坚定
Keep learning and sharing
展开
-
海量数据处理面试题
算法与数据结构之海量数据处理面试题原创 2016-07-07 13:04:14 · 565 阅读 · 0 评论 -
二叉排序树(Java)
二叉排序树的删除代码,在网上看到很多,都感觉有点繁杂难以理解,于是,我结合了TreeMap的remove()方法写出二叉排序树的实现,如果有错误的地方,还请大家多多指正~~性质二叉排序树又称“二叉查找树”、“二叉搜索树”。二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值。若它的右子树不空,则右子树上所有结点的值均大于它的根结点的原创 2016-07-28 00:53:17 · 681 阅读 · 0 评论 -
字符串之KMP算法(Java)
字符串匹配的KMP算法,我之前复习数据结构的时候看过一遍没有看懂,今天我结合左程云的“程序员代码面试指南”和 阮一峰:字符串匹配的KMP算法 可以算是基本理解了KMP算法的思想。突然发现这个算法也并不复杂,之前想到就头痛(我滴天!)。KMP算法基本思想KMP算法是一种用于字符串匹配的算法,这个算法的高效之处在于当在某个位置匹配不成功的时候可以根据之前的匹配结果从模式字符串的另一个位置开始,而不必从头原创 2016-07-30 18:29:19 · 696 阅读 · 1 评论 -
二叉平衡树(Java)
在学习了 二叉排序树 的基础上,继续结合TreeMap的源码实现了二叉平衡树。性质平衡二叉搜索树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log2n),大大降低了操作的时间复杂度。实现原创 2016-08-01 15:38:39 · 742 阅读 · 3 评论 -
各种排序实现及比较(Java)
排序大的分类可以分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序。下面讲的排序都是属于内排序。内排序有可以分为以下几类:插入排序:直接插入排序、二分法插入排序、希尔排序。插入排序Java实现选择排序:简单选择排序、堆排序。选择排序Java实现交换排序:冒泡排序、快速排序。交换排序Java实现归并排序:归并排序Java实现基数原创 2016-08-06 18:50:38 · 467 阅读 · 0 评论 -
归并排序之Java实现
归并排序是一种不稳定的排序,其复杂度为O(nlogn)。基本思想:泛型是指将两个或两个以上的有序序列合并成一个有序序列。初始时将每个记录看成一个单独的有序序列,然后再对有序序列进行两两合并。 其带泛型的实现如下:package com.xqq.归并排序;public class MergeSort { public static <T> void mergeSort(T [] arrays原创 2016-08-16 09:37:32 · 380 阅读 · 0 评论 -
选择排序之Java实现
本篇文章主要实现了冒泡排序的原始方法,以及两种改进方法:package com.xqq.冒泡排序;/** * 冒泡排序是对相邻两个记录进行关键字比较和交换,这样每次交换后只能改变一对逆序记录 * 而快速排序则是从待排序记录的两端开始进行比较和交换,并逐渐向中间靠拢, * 有可能改变挤兑逆序记录,从而加快了排序速度 * 快速排序: 当序列基本有序或者逆序时, 每一趟基准只能将其他记录分成一部分原创 2016-08-16 08:41:56 · 365 阅读 · 0 评论 -
交换排序(Java)
交换排序主要包括冒泡排序与快速排序,下面是冒泡排序和其两种改进方法、快速排序以及其改进方法的代码:package com.xqq.冒泡排序;/** * 冒泡排序是对相邻两个记录进行关键字比较和交换,这样每次交换后只能改变一对逆序记录 * 而快速排序则是从待排序记录的两端开始进行比较和交换,并逐渐向中间靠拢, * 有可能改变挤兑逆序记录,从而加快了排序速度 * 快速排序: 当序列基本有序或者逆原创 2016-08-15 16:40:26 · 356 阅读 · 0 评论 -
插入排序(Java)
常见的插入排序有直接插入排序、折半插入排序和希尔排序三种。接下来我就将这三种的实现附代码如下:package com.xqq.插入排序;public class Sort<T> { @SuppressWarnings("unchecked") public void insertSort(T[] arrays) { if (arrays == null || array原创 2016-08-15 15:09:30 · 313 阅读 · 0 评论 -
二叉树的基本知识以及各种遍历(Java)
重要概念完全二叉树——若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层有叶子结点,并且叶子结点都是从左到右依次排布,这就是完全二叉树。 满二叉树——除了叶结点外每一个结点都有左右子叶且叶结点都处在最底层的二叉树,。深度——二叉树的层数,就是高度。性质在二叉树中,第i层的结点总数不超过2^(i-1);深度为h的二叉树最多有2^h-1个结点(原创 2016-07-27 17:14:47 · 442 阅读 · 0 评论