![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
python数据结构与算法
程序员kinton
Lucky.
展开
-
搜索算法——二分法查找及Python实现
搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的,因为该项目是否存在。 搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找二分法查找二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键...原创 2020-05-08 17:16:21 · 308 阅读 · 0 评论 -
常见排序算法效率比较
常见排序算法效率比较原创 2020-05-08 17:15:27 · 246 阅读 · 0 评论 -
排序算法——归并排序及Python实现
归并排序归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。归并排序的分析时间复杂度最优时间复杂度:O(nlogn)最坏时间复杂度:O(nlogn)稳定性...原创 2020-05-08 17:13:02 · 205 阅读 · 0 评论 -
排序算法——快速排序及Python实现
快速排序快速排序(英语:Quicksort),又称划分交换排序(partition-exchange sort),通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归(函数内部再调用函数自身)进行,以此达到整个数据变成有序序列。步骤为:从数列中挑出一个元素,称为"基准"(pivo...原创 2020-05-08 17:11:35 · 386 阅读 · 0 评论 -
排序算法——希尔排序及Python实现
希尔排序希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。希尔排序过程希尔排序的基本思想是:将...原创 2020-05-08 17:09:59 · 196 阅读 · 0 评论 -
排序算法——插入排序及Python实现
插入排序插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。插入排序分析时间复杂度最优时间复杂度:O(n) (升序排列,序列已经处于升序状态)最坏时间复杂度:O(n2n^...原创 2020-05-08 17:09:03 · 168 阅读 · 0 评论 -
排序算法——选择排序及Python实现
选择排序选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将...原创 2020-05-08 17:07:31 · 108 阅读 · 0 评论 -
排序算法——冒泡排序及Python实现
冒泡排序冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻...原创 2020-05-08 17:01:03 · 358 阅读 · 0 评论 -
什么是排序算法的稳定性
排序算法的稳定性稳定性:稳定排序算法会让原本有相等键值的纪录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前。当相等的元素是无法分辨的,比如像是整数,稳定性并不是一个问题。然而,假设以下的数对将要以他们的第一个数字来排序。(4, 1) (3, 1) (3, 7)(5, 6)在这个状况下,有可...原创 2020-05-08 16:59:47 · 7113 阅读 · 1 评论 -
数据结构——双端队列及Python实现
双端队列双端队列(deque,全名double-ended queue),是一种具有队列和栈的性质的数据结构。双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队。Python实现# coding:utf-8class Deque(object): """双端队列""" def __init__(self)...原创 2020-05-06 09:35:30 · 198 阅读 · 0 评论 -
数据结构——队列及Python实现
队列队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出的(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作!假设队列是q=(a1,a2,……,an),那么a1就是队头元素,而an是队尾元素。这样我们就可以删除时,总是从a1开始,而插入时,总是在队列最后。这也...原创 2020-05-06 09:34:42 · 156 阅读 · 0 评论 -
数据结构——栈及Python实现
栈栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端(称为栈顶端指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。由于栈数据结构只允许在一端进行操作,因而按照后进先出(LIFO, Last...原创 2020-05-06 09:33:03 · 164 阅读 · 0 评论 -
数据结构——双向链表及Python实现
双向链表一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。Python实现# coding:utf-8class Node(object): """节点""" def __init__(self, elem): self....原创 2020-05-05 17:56:43 · 182 阅读 · 0 评论 -
数据结构——单向循环链表及Python实现
单向循环链表单链表的一个变形是单向循环链表,链表中最后一个节点的next域不再为None,而是指向链表的头节点。Python实现# coding:utf-8class Node(object): """节点""" def __init__(self, elem): self.elem = elem self.next = None...原创 2020-05-05 17:55:03 · 171 阅读 · 0 评论 -
数据结构——单向链表及Python实现
单向链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。表元素域elem用来存放具体的数据。链接域next用来存放下一个节点的位置(python中的标识)变量p指向链表的头节点(首节点)的位置,从p出发能找到表中的任意节点。Python实现# codi...原创 2020-05-05 17:52:47 · 223 阅读 · 0 评论