![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
青青草原の美羊羊
此人很懒,什么都不会
展开
-
【学习笔记】归并排序
来自b站视频 算法原理 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。先递归分解数组,再合并数组。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。 将数组分解最小之后,然后合并两个有序数组,基本思路就是比较两个数组的最前面的数,谁小就先去谁,取了后相应的指针就往后移一位。然后再比较,直到一个数组为空,最后把另一个数组的剩余部分复制过来即可。 如图所示 其中“并”可详解为: 动图演示 算法实现 def mergesort(alist)原创 2021-01-18 17:50:30 · 118 阅读 · 0 评论 -
【学习笔记】希尔排序
来自b站视频 算法原理 希尔排序是插入排序的改进版。比较时不是以1为步长,而是以gap为步长。 把序列按下表的一定增量(gap)分组,对每组使用直接插入排序算法排序;随着增量gap的减小,减值1时全部序列被分为1组,算法终止。 需要三层循环。 第一层循环(gap):gap变化最小值为1之前插入算法执行的次数 第二层循环(j):控制的是子序列当中执行特定的插入算法的比较和交换 第三层循环(i):控制的是所有子序列中的所有元素 如图所示 具体实现 def shellsort(alist): '''希尔排原创 2021-01-14 14:16:22 · 174 阅读 · 2 评论 -
【学习笔记】快速排序
来自b站视频 算法原理 通过一次排序将要排序的数据分割为独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别再进行快速排序,整个排序过程可以递归进行。 步骤 选择序列第一个数为基准mid_value,并给定所要排序的列表的起始位置first(low)和终止位置last(high)。 high游标左移,当指向的数要小于mid_value时,停止左移,并将high游标指向的数据赋给low。 low游标右移,当指向的数要大于mid_value时,停止右移,并将low游原创 2021-01-13 17:15:34 · 123 阅读 · 0 评论 -
【学习笔记】插入排序
来自b站视频 算法原理 通过构建有序序列,对于未排序数据,在已排序序列中向前扫描,找到相应位置并插入。在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 需要两层循环。 第一层循环(j):表示从右边的无序序列中取出元素的过程。1~n-1**range(1,n)** 第二层循环(i):从右边的无序序列中取出第一个元素,然后与前面的有序序列进行比较,放入正确的位置中。i>0 动图演示 具体实现 def insertsort(alist): n = len(alist原创 2021-01-12 16:29:11 · 112 阅读 · 1 评论 -
【学习笔记】选择排序
来自b站视频 算法原理 把序列视为两部分,一部分有序,一部分无序。 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 需要两层循环。 第一层循环j,用于对每个位置均寻找最小值。range(0, n-1) 第二层循环i,用于对某个位置寻找最小值时,需要遍历未排序的全部数。range(j+1, n) 如图 动图演示 具体实现 def selectsort(alist): n原创 2021-01-12 11:53:11 · 60 阅读 · 0 评论 -
【学习笔记】冒泡排序
来自b站视频 算法的稳定性 a=b,排序前a在b前面,排序后a还在b前面,称该算法稳定。 原理 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。重复至排序完成。 需要两层循环 第一层外层循环j,重复走访多少次range(n-1) 第二层内层循环i,每一次从头走到尾需要比较多少次元素 range(n-1-j) 如图 动图演示 具体实现 def bubblesort(alist): '''冒泡排序''' n = len(alist) for j in原创 2021-01-11 17:18:14 · 185 阅读 · 1 评论 -
【学习笔记】数据结构-单链表
单链表实现(python) 来自b站视频 定义 链表是一种线性表,但不想顺序表一样连续存储数据,而是在每一个节点里存放下一个节点的位置信息。 具体代码实现 class Node(): def __init__(self, elem): self.elem = elem self.next = None class SingleLinkList(): def __init__(self, node=None): self.__head =原创 2021-01-09 17:56:04 · 165 阅读 · 1 评论