一、算法相关
未整理,先跳过
二、常用排序
名称 |
复杂度 |
说明 |
备注 |
冒泡排序 |
O(N*N) |
将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 |
|
插入排序 Insertion sort |
O(N*N) |
逐一取出元素,在已经排序的元素序列中从后向前扫描,放到适当的位置 |
起初,已经排序的元素序列为空 |
选择排序 |
O(N*N) |
首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此递归。 |
|
快速排序 Quick Sort |
O(n *log2(n)) |
先选择中间值,然后把比它小的放在左边,大的放在右边(具体的实现是从两边找,找到一对后交换)。然后对两边分别使用这个过程(递归)。 |
|
堆排序HeapSort |
O(n *log2(n)) |
利用堆(heaps)这种数据结构来构造的一种排序算法。堆是一个近似完全二叉树结构,并同时满足堆属性:即子节点的键值或索引总是小于(或者大于)它的父节点。 |
近似完全二叉树 |
希尔排序 SHELL |
O(n1+£) 0<£<1 |
选择一个步长(Step) ,然后按间隔为步长的单元进行排序.递归,步长逐渐变小,直至为1. |
|
箱排序 |
O(n) |
设置若干个箱子,把关键字等于 k 的记录全都装入到第k 个箱子里 ( 分配 ) ,然后按序号依次将各非空的箱子首尾连接起来 ( 收集 ) 。 |
分配排序的一种:通过" 分配 " 和 " 收集 " 过程来实现排序。 |
1、冒泡排序 O(N*N)
将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮
data_set = [ 9,1,22,31,45,3,6,2,11 ] loop_count = 0 for j in range(len(data_set)): for i in range(len(data_set) - j- 1): # -1 是因为每次比对的都 是i 与i +1,不减1的话,最后一次对比会超出list 获取范围,-j是因为,每一次大loop就代表排序好了一个最大值,放在了列表最后面,下次loop就不用再运算已经排序好了的值 了 if data_set[i] > data_set[i+1]: #switch tmp = data_set[i] data_set[i] = data_set[i+1] data_set[i+1] = tmp loop_count +=1 print(data_set) print(data_set) print("loop times", loop_count)
二叉树遍历
class BinaryTreeNode(object): def __init__(self, data=None, left=None, right=None): self.data = data self.left = left self.right = right class BinaryTree(object): def __init__(self, root=None): self.root = root def is_empty(self): return self.root == None def preOrder(self,BinaryTreeNode): if BinaryTreeNode == None: return # 先打印根结点,再打印左结点,后打印右结点 print(BinaryTreeNode.data) self.preOrder(BinaryTreeNode.left) self.preOrder(BinaryTreeNode.right) def inOrder(self,BinaryTreeNode): if BinaryTreeNode == None: return # 先打印左结点,再打印根结点,后打印右结点 self.inOrder(BinaryTreeNode.left) print(BinaryTreeNode.data) self.inOrder(BinaryTreeNode.right) def postOrder(self,BinaryTreeNode): if BinaryTreeNode == None: return # 先打印左结点,再打印右结点,后打印根结点 self.postOrder(BinaryTreeNode.left) self.postOrder(BinaryTreeNode.right) print(BinaryTreeNode.data) if __name__ == '__main__': n1 = BinaryTreeNode(data="D") n2 = BinaryTreeNode(data="E") n3 = BinaryTreeNode(data="F") n4 = BinaryTreeNode(data="B", left=n1, right=n2) n5 = BinaryTreeNode(data="C", left=n3, right=None) root = BinaryTreeNode(data="A", left=n4, right=n5) bt = BinaryTree(root) print('先序遍历') bt.preOrder(bt.root) print('中序遍历') bt.inOrder(bt.root) print('后序遍历') bt.postOrder(bt.root)
未完待续。。
未来的你,会感谢现在努力的你!