![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
touchfl0w
code first!
展开
-
每天5分钟玩转python3算法:二分查找法
从今天开始,博主准备开始一段常见算法的学习,每天早上用半小时写一个算法,并以博客的形式展现出来,算法实现使用Python3,希望坚持下去^_^alg1:二分查找法1、运行时间 二分查找相比于依次查找,查询速度提升明显: + 依次查找:O(n) + 二分查找:O(logn) n表示候选数的数目;O(logn)实际代表找到目标数需要的查询次数;实际上查询次数可以大概代表运行时间...原创 2018-07-09 18:04:46 · 612 阅读 · 0 评论 -
归并排序的实现及其优化(递归法)
归并排序一、思路(递归)list = [a,b,c,d]1、 递归过程1、数组一分为2,list1 = [a,b] list2 = [c,d]2、先确立递归项:分别对list1/list2做归并排序,此时可以假设左右子数组已经有序。3、执行merge子过程,将list1/list2合并并使之有序。3、在程序首部添加基准条件:当前候选数组长度为1,直接return,停止向下递归。约...原创 2018-10-08 17:21:51 · 599 阅读 · 0 评论 -
冒泡排序及其优化
冒泡排序一、思路1、在数组[0,n)上2、从i=0开始,不断比较list[i]与list[i+1],顺序的话不做调整;逆序的话交换二者位置。3、i+14、当i = n-2时,1次遍历结束,最大值到了正确位置5、在剩余数组中继续进行上述遍历过程二、实现嵌套代码编写过程中循环体,先用pass占位,减小思维复杂度from sort_helper import test_sort,r...原创 2018-10-07 18:58:17 · 185 阅读 · 0 评论 -
选择排序及其优化
选择排序复杂度:O(n**2)一、思路index 0 1 2 3 4 ... n-1 nvalue 3 1 2 5 4 ... 8思考过程:1、在整个数组[0,n)内寻找最小值1,将其与list[0]交换位置:1 3 2 5 4 8,此时index=0的位置已排序完成2、在[1,n)内寻找最小值,将最小值与list[1]交换位置,此时index=1的位置排序完成3、迭代下去,...原创 2018-10-07 01:33:57 · 189 阅读 · 0 评论 -
插入排序及其优化
插入排序复杂度O(n**2),用笔模拟过程可轻松得出一、思路index 0 1 2 3 4 5value 4 3 2 6 4 81、选定起始指针index=0,此时已排好顺序的子数组长度为1(就是list[0]==4)2、指针后移,候选元素变为list[1]==3,将该元素不断向左交换到某个位置,使得list[0]与list[1]组成的子数组有序3、指针继续后移,直到抵达数组尾,向...原创 2018-10-07 01:33:14 · 549 阅读 · 0 评论 -
列表的实现与应用
抽象数据结构listpython内置实现了list;但list是一种通用数据结构,类似于c++中的vector下面使用链表来实现list;python内置list使用数组(array.Array模块)来实现list的数据结构和操作方法如下:一、实现(基于链表)由于实现方式不同,该实现方式的各种操作时间复杂度不同于内置list方法1:内置list(基于数组实现)方法2:基于链表...原创 2018-10-06 18:41:23 · 727 阅读 · 0 评论 -
双端队列的实现与应用
抽象数据类型dequeue一、实现方法1from collections import dequeue方法2基于listclass Dequeue(): def __init__(self): self.items = [] def addFront(self, item): """右侧为front""" self.it原创 2018-10-06 11:55:33 · 1733 阅读 · 1 评论 -
队列的实现与应用
抽象数据类型queue的定义实现了以下数据结构与操作方法的数据类型称为queue一、队列的python实现方法一:标准库from queue import Queue基于list实现class Queue(): def __init__(self): self.items = [] def enqueue(self, item): #左边为rear,右边为fron...原创 2018-10-06 00:49:59 · 372 阅读 · 0 评论 -
栈的实现与应用
一、栈的实现方法一:就使用list即可先进后出方法二:定义Stack,抽象出栈class Stack: #栈的python实现 def __init__(self): self.items = [] def push(self, item): #append操作O(1) self.items.append(item) def pop(self): re...原创 2018-10-05 22:15:09 · 328 阅读 · 0 评论 -
Python内置数据结构及其复杂度
为了使用python实现复杂数据结构与算法,需要借助python内置的基础和数据结构,主要是list和dict,明白这两种数据结构各操作的复杂度对于问题求解以及计算复杂度有着至关重要的作用。一、list1、内部使用数组实现2、缺陷:在头部删除、插入元素复杂度为O(n),这种情况下,推荐使用collections.deque二、dict...原创 2018-10-05 22:13:59 · 555 阅读 · 0 评论 -
每天5分钟玩转python3算法:选择排序
alg2:选择排序法1、运行时间O(n*2)> 单次查找最小/大元素耗时O(n),排出一个有序列表需要进行n次操作,平均耗时O(n*n)==O(n*2)2、使用场景可运用于无序列表,但不是最优解3、代码实现def search_min(array): """查找列表中的最小数""" min_index = 0 min_num = ar...原创 2018-08-27 14:15:51 · 304 阅读 · 0 评论 -
归并排序(迭代法)
归并排序一、思路(自下而上迭代)4 9 2 7 11、以区间大小sz=1划分数组,即在长度为1的区间内进行merge排序。4|9|2|7|12、sz*2,继续上述过程,注意:最后一个元素只有一个,不过没关系,__merge2支持这样的操作,只要传入正确的left,mid,right4 9|2 7|1 3、设定边界条件,sz < len(list)+1, 同时由于数组下标用...原创 2018-10-10 18:14:51 · 2144 阅读 · 1 评论