算法与数据结构
奔腾的小野马~~
代码是敲不完的,BUG是解不完的,加油吧,骚年们
展开
-
算法排序 ---- 算法效率比较
算法排序算法效率比较原创 2019-12-15 21:58:52 · 87 阅读 · 0 评论 -
排序算法 ---- 归并排序
归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。代码实现def merge_sort(alist): if len(alist) <= ...原创 2019-12-15 21:56:50 · 81 阅读 · 0 评论 -
排序算法 ---- 希尔排序
希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序的过程希尔排序的基本思想是:将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列(步长更长了,列数更少了)来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序。代码实现de...原创 2019-12-15 21:51:49 · 124 阅读 · 0 评论 -
排序算法 ---- 快速排序
快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。步骤为:1、从数列中挑出一个元素,称为"基准"(pivot),2、重新排序数列...原创 2019-12-15 21:38:31 · 104 阅读 · 0 评论 -
排序算法 ---- 插入排序
插入排序插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。def insert_sort(alist): "插入排序" n = len(alist) fo...转载 2019-12-15 21:24:21 · 85 阅读 · 0 评论 -
排序算法 ---- 选择排序
选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将...原创 2019-12-15 20:56:30 · 67 阅读 · 0 评论 -
排序算法 ---- 冒泡排序
冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元...原创 2019-12-15 20:51:39 · 131 阅读 · 0 评论 -
数据结构 ---- 队列
队列队列的概念队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后...原创 2019-12-15 20:40:35 · 68 阅读 · 0 评论 -
数据结构 ---- 双向链表
双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。操作is_empty() 链表是否为空length() 链表长度travel() 遍历链表add(item) 链表头部添加append(item) 链表尾部添加insert(pos, item)...原创 2019-12-15 20:35:06 · 47 阅读 · 0 评论 -
数据结构 ---- 单向循环链表
单向循环链表单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。操作is_empty() 判断链表是否为空length() 返回链表的长度travel() 遍历add(item) 在头部添加一个节点append(item) 在尾部添加一个节点insert(pos, item) 在指定位置pos添加节点remove(item) 删除...原创 2019-12-15 20:30:21 · 90 阅读 · 0 评论 -
数据结构 ---- 栈
栈栈的概念栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Las...原创 2019-12-15 20:26:58 · 68 阅读 · 0 评论 -
数据结构 ---- 链表
链表使用链表的意义顺序表的构建需要预先知道数据大小来申请连续的存储空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。链表的定义链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。单向链表...原创 2019-12-15 20:21:16 · 76 阅读 · 0 评论 -
数据结构---- 顺序表
顺序表的基本形式数据元素本身连续存储,每个元素所占的存储单元大小固定相同,元素的下标是其逻辑地址,而元素存储的物理地址(实际内存地址)可以通过存储区的起始地址Loc (e0)加上逻辑地址(第i个元素)与存储单元大小(c)的乘积计算而得,访问指定元素时无需从头遍历,通过计算便可获得对应地址,其时间复杂度为O(1)。如果元素的大小不统一,则须采用图b的元素外置的形式,将实际数据元素另行存储,而顺...原创 2019-12-11 20:59:22 · 154 阅读 · 0 评论 -
算法相关概念
文章目录算法的提出算法的概念算法的五大特性执行时间反应算法效率时间复杂度与“大O记法”最坏时间复杂度时间复杂度的几条基本计算规则常见时间复杂度常见时间复杂度之间的关系算法的提出算法的概念算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再...原创 2019-12-11 10:07:56 · 162 阅读 · 0 评论