算法与数据结构
java小白~
good good study,day day up.
展开
-
java-二叉树(code)
二叉树的通用接口public interface ITree<E> { public int size();// public boolean isEmpty(); public void clear(); public void add(E element); public void remove(E element); public...原创 2020-04-24 16:42:38 · 163 阅读 · 0 评论 -
Redis-数据结构
Redis数据结构redis的数据结构有5种,分别为string(字符串)、set(集合)、zset(有序集合)、hash(哈希)、list(列表)。1.string 字符串字符串string是redis最简单的数据结构,redis的数据结构都是以唯一的key作为字符串名称,然后通过唯一的key获取不同的value值,不同类型的数据结构的差异就在于value的结构不一样。字符串的用途非常广泛...原创 2019-08-25 13:42:56 · 124 阅读 · 0 评论 -
算法与数据结构-排序(2)
归并排序如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。public static void merger(int[] a,int left,int mid,int right) { int[] temp=new int[a.length]; int p1=left,p2=mid+1,k=left;...原创 2019-04-30 09:56:52 · 86 阅读 · 0 评论 -
算法与数据结构-排序(1)
有序度有序度是数组中具有有序关系的元素对的个数。有序元素对用数学表达式表示就是这样:有序元素对:a[i] <= a[j], 如果 i < j。满有序度对于一个完全有序的数组,比如 1,2,3,4,5,6,有序度就是n*(n-1)/2逆有序度逆序度 = 满有序度 - 有序度。我们排序的过程就是一种增加有序度,减少逆序度的过程,最后达到满有序度,就说明排序完成了。冒泡时间复杂...原创 2019-04-30 09:51:57 · 87 阅读 · 0 评论 -
算法与数据结构-递归
题目走n个台阶,每次可以走一步或者两步,有多少钟走法递归公式f(1) = 1;f(2) = 2;f(n) = f(n-1)+f(n-2)代码实现int f(int n){if(n1) return 1;if(n2) return 2;return f(n-1)+f(n-2);}满足递归的三个条件一个问题的解可以分解为几个子问题的解这个问题与分解之后的子问题,除了数据规...原创 2019-04-30 09:42:13 · 102 阅读 · 0 评论 -
算法与数据结构-链表
链表底层存储结构数组需要一块连续的内存空间来存储,对内存的要求比较高。如果我们申请一个 100MB 大小的数组,当内存中没有连续的、足够大的存储空间时,即便内存的剩余总可用空间大于 100MB,仍然会申请失败。而链表恰恰相反,它并不需要一块连续的内存空间,它通过“指针”将一组零散的内存块串联起来使用。单链表我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据...原创 2019-04-30 09:33:27 · 133 阅读 · 0 评论 -
算法与数据结构-队列
队列特点先进先出入队 enqueue(),放一个数据到队列尾部;出队 dequeue(),从队列头部取一个元素。用数组实现的队列叫作顺序队列,用链表实现的队列,叫作链式队列。Demo注意:这个Demo里边的Array是数组篇中的Array引用。package com.wanda.array;import com.wanda.interfaces.Queue;public cl...原创 2019-04-29 11:36:19 · 140 阅读 · 0 评论 -
算法与数据结构-栈
栈的特点先进后出从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数 据。栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序 栈,用链表实现的栈,我们叫作链式栈。用数组实现的顺序栈Demo注意:这个Demo里边的Array是基于上一篇的数组里边的Array类。package com.wanda.array;import com.wanda...原创 2019-04-29 11:16:20 · 82 阅读 · 0 评论 -
算法与数据结构-数组
数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。数组的特点数组用一块连续的内存空间,来存储相同类型的一组数据,最大的特点就是支持随机访问,但插入、删除操作也因此变得比较低效,平均情况时间复杂度为 O(n)。在平时的业务开发中,我们可以直接使用编程语言提供的容器类,但是,如果是特别底层的开发,直接使用数组可能会更合适。Demo,底层用数...原创 2019-04-29 11:08:08 · 100 阅读 · 0 评论 -
算法与数据结构-基础
时间复杂度时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。分析原则1. 只关注循环执行次数最多的一段代码2. 加法法则:总复杂度等于量级最大的那段代码的复杂度3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积常见的时间复杂度常量阶 O(1)对数阶O(logn)线性阶O(n)线性对数阶O(nlogn)平方阶O(n平方)空间复杂度空间复...原创 2019-04-29 11:02:03 · 69 阅读 · 0 评论 -
数据结构之链表 java实现
链表是一种常见的数据结构,是一种线性表,它是物理单元上非连续存储的结构单元(这一点和数组恰恰相反),链表的基本组成包括一个存储数据的节点和一个指向下一个节点的引用或者指针。``链表的应用可以用链表实现最基本的栈和队列。链表的优缺点链表可以灵活的利用内存空间,并且插入和删除的效率也高于数组,和数组相比失去了随机访问的能力,同时由于增加了指针域增加了内存空间的开销。今天我们先学习如何用java实...原创 2019-01-03 15:47:49 · 126 阅读 · 0 评论 -
java 计数排序
根据要排序的元素的个数创建一个数组,数组的下标为0到n,然后数组的初始化的值为0,然后根据元素的个数进行计数,每多一个数,数组对应下标里的值加1,最后循环输出数组,此时数组里的元素就是有序的它的时间复杂度小于O(nlogn)`package shujujiegou;import java.util.Arrays;public class CountSort { public stati...原创 2018-11-16 21:24:37 · 402 阅读 · 1 评论 -
java 优先队列
队列的基本准则就是先进先出,优先队列有两种,一种就是最大优先队列,就是不管入队元素,先让队列里的最大值先出队,另一种就是最小优先队列,就是不管入队元素,先让队列里的最小的元素先出队,运用二叉堆的方法可以实现它,把队列里的元素调整成大顶堆或者小顶堆,最后获取堆顶的元素进行了。package shujujiegou;import java.util.Arrays;/** * 优先级队列 ...原创 2018-11-16 20:13:53 · 496 阅读 · 0 评论 -
java 堆排序
堆排序就是在完全二叉堆的基础上,将堆顶的元素删除,也就是将对顶的元素和堆尾的元素交换,然后重新调整成二叉堆。`‘package shujujiegou;import java.util.Arrays;public class HeapSort { //下沉调整 public static void downAdjust(int[] array,int parentIndex,int...原创 2018-11-16 19:36:48 · 74 阅读 · 0 评论 -
java 二叉堆
二叉堆的本质还是数组,完全二叉堆是建立完全二叉树的基础上的,二叉堆又分为大顶堆和小定堆,大顶堆就是父节点的值大于左右孩子的两个节点的值,小顶堆就是父节点的值小于左右孩子节点的值。堆的自我调整包括删除节点和添加节点,添加节点是在二叉堆的最后一个位置上添加,删除节点是删除根节点的值。然后左右孩子的重新调整成一个二叉堆。二叉堆的构建就是让一个无序的完全二叉树调成成二叉堆,本质就是让所有非叶子节点上升或者...原创 2018-11-16 09:09:41 · 182 阅读 · 0 评论 -
java 鸡尾酒排序
java常用的排序算法,鸡尾酒排序就像钟摆一样,第一轮从左往右,第二轮从右往左,第三轮从左往右。。。。直到元素没有位置交换的时候,说明已经有序,停止交换。是冒泡算法的升级版package shujujiegou;import java.util.Arrays;/** * 鸡尾酒排序就像钟摆一样,第一轮从左往右第二轮从右往左,第三轮从左往右。。。。 * 直到元素没有位置的交换证明已经有...原创 2018-11-14 19:32:42 · 190 阅读 · 0 评论 -
java 快速排序
快排的本质是分治的思想,首先选择一个基点,然后比基点小的放在数组的左边,比基点大的放在数组的右边。选择基点的方式有挖坑法和指针交换法,先说挖坑法,设置两个指针left、right指向数列的最左元素和最右元素,把指针指向的元素和基准元素比较,如果比基准元素大,rigth向左移动,left指向的元素添入坑,中如果比基准元素小,left向右移动则把right指向的元素添入坑中 package...原创 2018-11-15 21:28:44 · 88 阅读 · 0 评论