
数据结构与算法
介绍常用的数据结构与算法相关的知识
hzulwy
技术嘛!最重要的是自己理解,然后才是分享
展开
-
排序算法之选择排序
排序算法之选择排序选择排序和冒泡排序的思想有些类似,冒泡排序是每次循环都是相邻的两数两两比较,例如:一个数组[5,4,3,2],冒泡排序第一次循环,5与4比较,5大于4交换,接着5与3比较,5大于3交换,接着5与2比较,5大于2交换;第一次循环之后数组中的值为[4,3,2,5],5是一步一步被移动的;而选择排序是每次循环之后,直接将5移动到终点,例如:选择排序第一次循环,5与4比较,5大于4,记...原创 2019-12-06 20:08:18 · 107 阅读 · 0 评论 -
排序算法之冒泡排序
排序算法之冒泡排序本文主要介绍冒泡排序的原理及其代码实现冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一 个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作首先,来看一组数据4,5,6,3,2,1,从小到大进行排序,第一趟冒泡的结果如下图所示:从上图可以知道,每趟冒泡都是在执行如下...原创 2019-12-02 22:11:02 · 324 阅读 · 0 评论 -
排序算法之插入排序
排序算法之插入排序首先,我们将数组中的数据分为两个区间,已排序区间和未排序区间。初始已排序区间只有一个元素,就是数组的第一个元素。插入算法的核心思想是取未排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。每插入一次,已排序区间的长度加1,未排序区间的长度减一.重复这个过程,直到未排序区间中元素为空,算法结束。如图所示(以升序为例):把数组分为两部分[...原创 2019-12-06 19:48:07 · 176 阅读 · 0 评论 -
数据结构之队列
队列队列跟栈非常相似,支持的操作也很有限,最基本的操作也是两个:入队enqueue(),放一个数据到 队列尾部;出队dequeue(),从队列头部取一个元素。用数组实现的栈叫作顺序栈,用链表实现的栈叫作链式栈。同样,用数组实现的队列叫作顺序队列, 用链表实现的队列叫作链式队列。循环队列:顺序队列当队头数据出队列的时候,需要将队列种的所有数据向前移动,而循环队列避免顺序队列中进行数据搬移。核...原创 2019-12-08 17:26:04 · 104 阅读 · 0 评论 -
数据结构之栈
栈什么是栈?1.后进者先出,先进者后出,这就是典型的“栈”结构2.从栈的操作特性来看,是一种“操作受限”的线性表,只允许在端插入和删除数据为什么需要栈?1.栈是一种操作受限的数据结构,其操作特性用数组和链表均可实现2.但,任何数据结构都是对特定应用场景的抽象,数组和链表虽然使用起来更加灵活,但却暴露了几乎所有的操作,难免会引起错误操作的风险。3.所以,当某个数据集合只涉及在某...原创 2019-12-08 17:00:27 · 169 阅读 · 0 评论 -
数据结构之链表
链表什么是链表1.和数组一样,链表也是一种线性表2.从内存结构来看,链表的内存结构使不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next链表的特点1.插入、删除数据效率O(1)级别(只需要更改指针指向即可),随机访问效率O(n)级别(需要从链头至...原创 2019-12-08 16:32:17 · 183 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序的基本思想是:设待排序元素序列有n个元素,首先取一个整数gap<n作为间隔,将全部元素分为gap个子序列,所有距离为gap的元素放在同一个子序列中,在每一个子序列中分别施行直接插入排序。然后缩小间隔gap,例如取gap=[gap/2],重复上述的子序列划分和排序工作。直到最后取gap==1,将所有元素放在同一个序列中排序为止。开始时gap的取值较大,每个子序列中的元素较少,排序速...原创 2020-01-22 19:11:15 · 266 阅读 · 0 评论 -
排序算法之快速排序
快速排序算法在大多数计算机上运行都比其他排序算法快,而且快速排序算法在空间上只使用一个小的辅助栈,消耗的资源比其他的排序算法小,其内部的循环也很小。快速排序的时间复杂度是O(nlogn),但是在极端情况下快速排序的时间复杂度会退化成O(n^2)。例如,如果数组中的数据原来已经是有序的了,比如1,3,5,6,8。如果我们每次选择最后一个元素作为pivot,那每次分区得到的两个区间 都是不均等的。...原创 2020-01-20 12:03:23 · 354 阅读 · 0 评论 -
排序算法之线性排序(时间复杂度为线性)
桶排序桶排序的核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独用快排或者冒泡等排序算法进行排序。桶内排完序之后,再把桶里的数据按照顺序依次取出,组成的序列就是有序的了。桶排序的时间复杂度是O(n)。我们分析一下,如果要排序的数据有n个,我们把它们均匀地划分到m个桶内,每个桶里就有k=n/m个元素。每个桶内部使用快速排序,时间复杂度为O(k * logk)。m个桶排序的时 间复...原创 2020-01-22 18:49:02 · 913 阅读 · 0 评论 -
排序算法之分治排序
归并排序是基于分治法实现的。归并排序将待排序的元素序列分为两个长度相等的子序列,为每一个子序列排序,然后再将它们合并成一个序列。合并两个子序列的过程称为两路归并。在执行两路归并算法时,先把待归并元素序列L1复制到辅助数组L2中,再从L2归并到L1中。归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)归并排序时稳定的排序算法,但是由于空间复杂度为O(n)因此不是原地排序算法。算...原创 2020-01-18 22:40:57 · 822 阅读 · 0 评论 -
二叉树基础(上)
首先来看,什么是“树”?再完备的定义,都没有图直观。所以我在图中画了几棵“树”。你来看看,这些“树”都有什么特征?树里面每个元素我们叫作“节点”;用来连线相邻节点之间的关系,我们叫作“父子关系”。比如下面这幅图,A节点就是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。我们把没有 父节点的节点叫作根节点,也就是图中的节点E。我们...原创 2020-02-01 22:26:55 · 154 阅读 · 0 评论 -
搜索结构(静态)
搜索,就是在数据集合中寻找满足某种条件的数据元素。最常见的一种方式是事先给定一个值,在集合中找出其关键码等于给定值的元素。搜索的结果通常有两种可能:一种可能是搜索成功,即找到满足条件的数据元素。这时,作为结果,可报告该元素在结构中的位置,还可以进一步给出该元素中的具体信息。后者在数据库中叫做检索。另一种可能是搜索不成功,或搜索失败。作为结果,也应该报告一些信息,如失败标志、失败位置等。通常称用...原创 2020-01-29 21:32:41 · 612 阅读 · 0 评论