![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
布衣清水
这个作者很懒,什么都没留下…
展开
-
二叉搜索树的实现(包含插入、查找、遍历、删除等)【Java版】
package com.BinarySearchTree; import java.util.LinkedList; /** *实现二分搜索树 *O(logn) *适用于查找表(字典)//定义树的结点 private class Node { private Key key; //键,相当于字典中的单词 private Value v...原创 2018-03-08 22:33:19 · 507 阅读 · 0 评论 -
并查集的三种优化【Java版】
/** *优化方法二:快速union,慢find *方法一合并时,需要将p元素集合中所有元素都合并到q集合中,效率为O(n) *现只需将p元素所属集合中根节点所在的元素和q合并即可,构成一棵树,O(1) *每个元素均有自己的父节点,根节点才是最终元素所属的集合 *合并时,将两个元素的根节点合并 */public class UnionFind2 { priv...原创 2018-03-25 23:09:58 · 480 阅读 · 0 评论 -
数组实现并查集【Java版】--基本实现
/** * 数组实现并查集 * 可以判断元素之间是否连接 * 可以很好实现网络中节点的连接问题 */public class UnionFind { //定义一个数组,数组下标表示并查集所有元素,对应的值表示元素所属的集合 private int[]id; //数组中包含的元素个数 private int count; public ...原创 2018-03-19 21:14:12 · 575 阅读 · 0 评论 -
快速排序的实现及三种优化方式【Java版】
1、普通快速排序/** *实现快速排序(普通快速排序) *对arr[l,,,,r]共n个元素进行排序 *用递归方法,O(nlogn) *方法一 *缺点:在近乎有序的数组下,该快排比归并要慢很多 *因为每次排序后,左右两个子递归规模相差悬殊,构成的二叉树平衡因子没有归并好 *在完全有序时,退化为O(n^2) *优化:随机选取基准值 */public c...原创 2018-03-12 19:57:36 · 3321 阅读 · 0 评论 -
第三种堆排序---原地堆排序【Java版】
/** *实现堆排序[原地堆排序] *堆适用于动态数据的维护,不适合系统级的排序 *时间复杂度O(nlogn),从小到大排序,前两种堆排序均开辟了额外空间 *不需开辟额外空间,也不需为额外空间进行处理,所以,空间复杂度为O(1) *根节点从0开始,左孩子:2i+1,右孩子2i+2; */public class HeapSort3 { public voi...原创 2018-03-18 17:55:12 · 339 阅读 · 0 评论 -
最大堆建堆过程的优化及第二种堆排序【Java版】
*最大堆建堆过程的优化 *与上条博客区别在于构造函数,heapify过程,具体来说:public class MaxHeap { private int count; //记录堆中存储元素的个数 private static int[] data; //用数组存储二叉堆 private int capacity;//***********************...原创 2018-03-17 21:56:01 · 785 阅读 · 1 评论 -
归并排序的实现及优化【Java版】
/** *实现归并排序 *对arr[left,,,,right]共n个元素进行排序 *用递归方法,O(nlogn),自顶向下,可以再用迭代方法(自底向上) */public class MergeSort { public void mergeSort(int[] arr,int n) { __mergeSort(arr,0,n-1);//只在mer...原创 2018-03-11 21:29:44 · 355 阅读 · 0 评论 -
二分查找的递归与非递归实现【Java版】
/** *递归实现二分查找 *时间复杂度O(logn) *前提:数组有序 *如果找到target,返回相应的索引,未找到,返回-1 * */public class BinarySearch { public static int binarySearch(int[]arr,int l,int r,int target) { if(l>r) return -1; //找不到返回...原创 2018-03-03 22:47:22 · 246 阅读 · 0 评论 -
选择排序的实现及优化【Java版】
1、基本实现/** *实现选择排序 *方法一 *O(n^2) */public class SelectSort { public void selectSort(int []arr,int n) { for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { ...原创 2018-03-10 22:14:53 · 344 阅读 · 0 评论 -
插入排序的实现及优化【Java版】
1、基本实现/** *实现插入排序 *方法一 *O(n^2) */public class InsertSort { public void insertSort(int[]arr,int n) { for(int i=1;i<n;i++) { for(int j=i;j>0;j--) { ...原创 2018-03-10 22:09:37 · 470 阅读 · 0 评论 -
实现最大堆(包括插入和从堆中取出元素)及第一种堆排序【Java版】
/** *实现最大堆 *用数组存储 *小优化:将swap用赋值代替,先不急着交换,先复制,再移动,最后赋值 *第一种堆排序,从小到大排序 *时间复杂度为O(nlogn) *空间复杂度O(n) */public class MaxHeap { private int count; //记录堆中存储元素的个数 private static int[] ...原创 2018-03-15 22:11:30 · 1071 阅读 · 0 评论 -
路径压缩——并查集的第四种优化【Java版】(递归与非递归版本)
/** *【路径压缩】处理并查集中的深的结点 * 对find方法进行优化 * 路径压缩中时间复杂度近乎为O(1) *就是让当前结点指向自己父亲的父亲,减少深度 *非递归的路径压缩 *路径压缩也可以采用基于集合中元素的个数而非深度来 */public class UnionFind5 { private int count; private int[]...原创 2018-03-28 23:06:54 · 823 阅读 · 0 评论