数据结构和算法
飞飞想去踢球
此人很懒
展开
-
00数据结构和算法基础
01 数据结构和算法基础01数据结构和算法基础第一次尝试算法的提出第二次尝试算法效率衡量时间复杂度基本规则常见时间复杂度Python内置类型性能分析timeit模块listdict数据结构抽象数据类型 ADT01数据结构和算法基础第一次尝试一道题a+b+c = 1000 a2+b2 = c^2 求 abc所有组合枚举法for a in range(0, 1001): for ...翻译 2019-04-11 12:09:29 · 126 阅读 · 0 评论 -
16 树
16 树# encoding: utf-8class Node(object): def __init__(self, item): self.item = item self.lchild = None self.rchild = Noneclass Tree(object): def __init__(self): self.root = None def ...转载 2019-04-14 20:56:33 · 75 阅读 · 0 评论 -
15 二分查找
15 二分查找# 二分查找 a必须是有序数组# 非递归def binary_search(a, item): n = len(a) head = 0 rear = n - 1 while head <= rear: mid = (head + rear) // 2 if a[mid] == item: return mid elif a[mid]...转载 2019-04-14 20:55:20 · 139 阅读 · 0 评论 -
14 归并排序
14 归并排序def merge_sort(a): n = len(a) if n <= 1: return a # 二分分解 注: 切片之后会生成新的列表 pos = n // 2 left = merge_sort(a[:pos]) right = merge_sort(a[pos:]) # 合并 return merge(left, right)d...转载 2019-04-14 20:54:24 · 45 阅读 · 0 评论 -
13 希尔排序
13 希尔排序# 希尔排序 插入排序的改进版def shell_sort(a): n = len(a) gap = n // 2 while gap >= 1: for i in range(gap, n): for j in range(i, 0, -gap): if a[j] < a[j - gap]: a[j], a[j - ...转载 2019-04-14 20:53:17 · 60 阅读 · 0 评论 -
12 快速排序_重要
12 快速排序# encoding: utf=8def quick_sort(a, start, end): # 快速排序: 将第一个值作为中间值, 将比它小的数都放在左边, 比它大的数都放在右边 # 递归退出条件 if start >= end: return # 基准元素 mid_value = a[start] # 游标 low high low = st...转载 2019-04-14 20:52:27 · 108 阅读 · 0 评论 -
11插入排序
11 插入排序# encoding: utf=8def insert_sort(a): # 插入排序: 打扑克, 每次将后一张牌插入到前面的正确位置 n = len(a) for i in range(1, n): for j in range(i, 0, -1): if a[j] < a[j - 1]: a[j], a[j - 1] = a[j - 1]...转载 2019-04-14 20:51:15 · 84 阅读 · 0 评论 -
10 选择排序
10 选择排序# encoding: utf=8def select_sort(a_list): # 选择排序: 从前往后, 每次外层循环记录最小数的索引, 内层循环结束后交换位置, 将最小的数前提 n = len(a_list) for i in range(n - 1): min_index = i for j in r...转载 2019-04-14 20:48:16 · 103 阅读 · 0 评论 -
09 冒泡排序
09 冒泡排序# encoding: utf=8def bubble_sort(a_list): # 冒泡排序: 从下往上, 相邻两数比较, 将最大的数冒上来 n = len(a_list) for i in range(n - 1): for j in range(n - i - 1): if a_list[j] &...转载 2019-04-14 20:47:11 · 49 阅读 · 0 评论 -
07 队列
07 队列# encoding: utf=8class Queue(object): """队列""" def __init__(self): self._list = [] def is_empty(self): """判断一个队列是否为空""" return self._list == [] def s...转载 2019-04-14 20:45:32 · 89 阅读 · 0 评论 -
06 栈
06 栈# encoding: utf=8class Stack(object): """栈""" def __init__(self): self._list = [] def is_empty(self): """判断栈是否为空""" return len(self._list) == 0 def si...转载 2019-04-14 20:42:15 · 60 阅读 · 0 评论 -
05 单向循环链表
# encoding: utf-8class SingleNode(object): """单向循环链表的节点""" def __init__(self, item): self.item = item self.next = Noneclass SingleCycleLinkList(object): """单向循环链表""" ...转载 2019-04-11 23:48:41 · 52 阅读 · 0 评论 -
04 双向链表
双向链表# encoding: utf-8class Node(object): """节点""" def __init__(self, item): self.item = item self.prev = None self.next = None# 继承单链表 复用代码class DoubleLinkList(SingleLinkList): """双链表...转载 2019-04-11 23:47:57 · 47 阅读 · 0 评论 -
03 单向链表
单向链表# encoding: utf-8class SingleNode(object): """单链表的节点""" def __init__(self, item): self.item = item self.next = Noneclass SingleLinkList(object): """单链表""" def ...转载 2019-04-11 23:46:44 · 48 阅读 · 0 评论 -
二叉树非递归遍历
def pre_order(root): """ 前序: 根 左 右 stack: 入栈顺序: 右 左 出栈顺序: 左 右 """ if not root: return [] stack = [] res = [] stack.append(root) while ...原创 2019-09-01 10:22:52 · 92 阅读 · 0 评论