算法与数据结构
基础数据结构与算法
Hajo_
任世事喧嚣,愿心无波澜。观众世成双,念一生无妨。
展开
-
数据结构与算法学习笔记十一 --- 树
树 (Tree)树树的定义:由n(n>0)个元素组成的有限集合,其中:每个元素称为结点(node);有一个特定的结点,称为根结点或根(root);除根结点外,其余结点被分成m(m>=0)个互不相交的有限集合,而每个子集又都是一棵树(称为原树的子树)树的特性:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,...原创 2020-03-04 14:45:30 · 213 阅读 · 0 评论 -
数据结构与算法学习笔记十 --- 归并排序算法
归并排序算法(Merge Sort)归并排序算法是一种递归排序算法,其原理是:先将序列进行递归分解,分解到不能再分解为止;然后在进行相邻的两两排序合并,最后完成排序。一般归并排序算法的递归分解,是使用折半分解。以序列 – [54, 26, 93, 17, 77, 31, 44, 55, 20] 为例流程可以参考下图:其中merge_sort()表示分解,result表示返回排序好的合并序...原创 2020-03-02 21:47:37 · 195 阅读 · 0 评论 -
数据结构与算法学习笔记九 --- 快速排序算法
快速排序算法(Quick Sort)快速排序算法是一种递归排序算法;其原理是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。简单点理解就是:以序列中的任意一个元素为基准(一般以第一个元素),通过逐个比较后,找到这个基准元素的合适位置(即在基...原创 2020-02-28 15:17:52 · 163 阅读 · 0 评论 -
数据结构与算法学习笔记八 --- 希尔排序算法
希尔排序算法(Shell Sort)希尔排序算法是插入排序算法的升级版,我们知道插入排序算法在两种情况下,插入排序的工作量是比较小的:在大多数元素已经有序的情况下在这种情况下,插入排序就不需要进行频繁的比较和交换,工作量就减少了在元素数量较少的情况下由于插入算法的时间复杂度与元素个数n 有关,n 变小了,时间也就相对变小了因此,希尔排序算法就是根据第一种情况得来的。希尔排序算法原...原创 2020-02-27 14:20:43 · 171 阅读 · 0 评论 -
数据结构与算法学习笔记七 --- 插入排序算法
插入排序算法(Insert Sort)插入排序算法的原理:把未排序的序列分成两部分,即有序部分和无序部分(一般把序列的第一个元素当作有序部分,剩余的当作无序部分),然后依次从无序部分取出一个元素与有序部分的每个元素比较,然后在有序部分的合适位置插入,直到整个序列有序。插入排序算法的原理与选择算法的原理比较插入排序算法的原理与选择排序算法的原理很相似,都是将待排序序列分成两部分(有序部分和无序...原创 2020-02-26 16:37:49 · 144 阅读 · 0 评论 -
数据结构与算法学习笔记六 --- 选择排序算法
选择排序算法(select sort)选择排序算法原理:首先在未排序的序列中找到最大或最小值,将它存放在起始位置,然后再从剩余未排序序列元素中继续寻找最大或最小值,将找的最大或最小值存放在已排序的序列尾部。以此类推,直到所有的元素均排序完毕。选择排序算法的python实现代码如下:def select_sort(alist): """选择排序""" # 外循环总轮数 ...原创 2020-02-26 15:16:22 · 120 阅读 · 0 评论 -
数据结构与算法学习笔记五 --- 冒泡排序算法
冒泡排序算法冒泡排序算法原理: 从未排序的序列的开头开始,比较相邻的两个元素,将值大(小)放在右边,每轮比较完成都会将最大(最小)放在最后一位,下一轮就只要从开头比较到倒数第二个。以此类推,直到序列排序完毕。对于一个有n个元素的序列,需要进行 n-1 轮循环比较.冒泡排序算法的python 实现代码如下:ef bubble_sort(alist): """冒泡排序""" ...原创 2020-02-26 15:11:06 · 133 阅读 · 0 评论 -
数据结构与算法学习笔记四---栈与队列
栈(stack)栈是一种容器,是一种逻辑数据结构;可存入数据元素,访问数据元素,删除数据元素;栈最主要的特点就是先进后出,即First In Last Out(FILO),栈只能在一端进行操作。(栈顶栈底)栈的两种基本操作为:push:入栈pop:出栈可用顺序表或链表来实现栈的python实现代码实现的基本操作:Stack()创建一个空栈push(item)添加一个元素到栈顶...原创 2020-02-26 13:05:14 · 220 阅读 · 0 评论 -
Python实现插入排序
python 实现 插入排序插入排序原理:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入*例如对列表 L = [2, 22, 12, 56, 78, 60] 进行排序开始排序时,我们先把列表的第一个元素 2 设为有序序列SortedList,剩下的元素设置为未排序数据UnsortedList,第一轮:我们从UnsortedList中取出第一个元素 22...原创 2019-10-10 16:01:21 · 181 阅读 · 0 评论 -
数据结构与算法学习笔记 三 --- 链表
链表的定义链表指的是在物理上非连续,非顺序的数据结构,它有一系列的节点(node)组成,这些节点包含两部分内容:数据区 和 节点区(指针区)。其中数据区存储数据元素;节点区用于链表各数据元素之间的逻辑链接。链表可分为单向链表和双向链表;两者区别在于:单向链表只有一个指向下一个数据的后继节点;而双向链表除了有指向下一个数据的后继节点还有一个指向上一个数据的前继节点。单向链表的python 实...原创 2020-02-21 15:09:13 · 119 阅读 · 0 评论 -
数据结构与算法学习笔记二-----顺序表
什么是顺序表顺序表是指一段物理地址连续的存储单位存储数据的线性结构。由于可以通过物理地址直接定位索引,所以获取顺序表中的某个元素所需的时间复杂度为O(1)。两种顺序表的布局顺序表有两种布局,一种是基本布局,一种是元素外置布局;基本布局的顺序表存储的是同一类型的数据,即每个数据元素的占用的存储单元大小都是一样,所以对于该顺序表中元素的读取就可以依靠各个数据元素的物理地址偏移量;元素外置顺...原创 2020-02-19 15:14:05 · 181 阅读 · 0 评论 -
数据结构与算法学习笔记一 -----时间复杂度
什么是算法在数学领域上,算法可以理解为对于某类问题的解决的公式或思想;在计算机领域上,算法本质上是一系列的指令,用于解决特定的运算或逻辑问题。简单点就是:就是解决某类问题的方法,当然某类问题会有很多的解决方法,这些方法就是算法的一种。有多种的解决方法,那么各种方法就有优劣的比较了。算法的效率衡量在计算机领域,算法的衡量有两个重要标准:时间复杂度和空间复杂度时间复杂度对于时间复杂度,得...原创 2020-02-18 18:32:09 · 219 阅读 · 0 评论 -
给定一个整型数组,求去除其中一个元素,使得剩余的元素乘积最大?(python实现)
问题:给定一个整型数组,求去除其中一个元素,使得剩余的元素乘积最大?分析:分为两种情况:a.给定数组中有奇数个负数----去除最小的负数b.给定数组中有偶数个负数(包括0个)----去除最小的非负数class Test(): def __init__(self, list_test): self.list = list_test def solve(sel...原创 2019-10-29 13:00:23 · 1083 阅读 · 0 评论