![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
呢喃北上
这个作者很懒,什么都没留下…
展开
-
排序算法之冒泡排序
一、冒泡排序的原理: 冒泡排序,顾名思义,就是把数看做一个个气泡,根据气泡的轻重(数的大小),轻的气泡将向上浮(小的数将往前排),重的气泡将向下浮(大的数将往后排)。冒泡排序是循环比较相邻两个数的大小,循环比较次数即为数组的长度-1。两者中较大的数将被右移,故下一次循环的比较对象数将减1。 原数组:56 33 78 67 32 第一次循环:33 5...原创 2017-07-18 16:29:27 · 547 阅读 · 0 评论 -
数据结构之栈与队列
写在前面 栈与队列是两种不同特点的数据结构。 栈遵循着先进后出的特点,它就像一个器皿,先放进去的后被取出来,后放进去也就是靠近瓶口的先出来。 队列,就像它的名字一般,它的结构类似于排队,先进先出,后进后出。栈的实现package Stack;public class MyStack { //底层实现是一个数组 private long[] ...原创 2018-03-22 16:48:55 · 198 阅读 · 0 评论 -
数据结构之链表
前言 链表与之前所讲的数据结构有一些不同。 栈与队列是申请一段连续的空间,然后按顺序来存储数据; 链表是一种物理上非连续、非顺序的存储结构,数据元素之间的顺序是通过每个元素的指针来关联的。链表结构 链表的每一个节点都包含两部分信息:元素数据本身和指向下一个元素地址的指针。链表分为两种类型:单向链表和双向链表。我们平时所说的链表即为单向链表。双向链表,...原创 2018-03-23 14:33:16 · 173 阅读 · 0 评论 -
数据结构之数组
数组作为最为基础的数据结构,以线性结构来存储固定大小、相同类型的数据。 Java中已经为我们封装好了ArrayList来描述各种操作,下面将自定义类分装并描述数组的操作。数组操作之增删改查package Array;public class MyArray { private long[] arr; //表示有效数据的长度 private ...原创 2018-03-21 14:49:13 · 227 阅读 · 0 评论 -
数据结构之二叉树
二叉树概念 二叉树是指每个父节点最多有两个子节点的树。二叉树的定义是一个递归的定义,它很明确地区分了一个根节点的两个子树,分别是左子树和右子树。 相关术语节点 树中每个元素叫作节点。根节点或树根 树顶端的一个节点叫作树根。子树 除根节点外,其他节点可以分为多个树的集合,叫作子树。节点的度 一个节点直接含有的子树的个数叫做节点的度。如上图的6节点的度为2,分...原创 2018-03-25 23:14:15 · 206 阅读 · 0 评论 -
排序算法之快速排序
前言 快速排序,仅仅听到这个名字,就觉得它和其他的排序算法非同一般了。的确,快速排序是一个非常效率的排序算法,如果说冒泡排序的时间复杂度为O(n),那么快速排序的时间复杂度就是O(logn)。 其实快速排序是对冒泡排序的一种改进。 冒泡排序每次只能交换相邻的两个元素,而快速排序是跳跃式的交换,交换距离很大,因此总的比较次数和交换次数少了很多,速度也快了不少。 它的基本思想...原创 2018-04-02 19:22:32 · 116 阅读 · 0 评论 -
数据结构之堆
前言 堆也是一种特殊的数据结构,是一种特殊形式的完全二叉树。堆分为两种:大顶堆(每个节点的值都不大于其父节点的值,也就是根节点的值是最大的)和小顶堆(每个节点的值都不小于其父节点的值,也就是根节点的值是最小的)。堆的基本操作(以大顶堆为例) 既然堆本身是完全二叉树,所以我们可以使用一维数组的方式进行储存。0位置用来存储元素的个数,1~n用来存储元素。所以对于任意...原创 2018-04-03 21:21:56 · 239 阅读 · 0 评论 -
排序算法之堆排序
前言接着上篇文章–数据结构之堆,学习下堆排序。其实了解堆的构建与删除的方法之后,应该很容易的想到堆排序的思想。 先初始化一个堆,将一个无序的待排的数组中的每一个值依次放入堆中,也就是上文提到的insert(),接下来一直执行删除操作,也就是上文提到的delete(),并且将被删除的元素放到数组的最后一个有效元素之后的一个位置,保存下来,最后的数组就是一个有序的数列了。实现代码...原创 2018-04-03 22:05:49 · 164 阅读 · 0 评论