常见数据结构和算法
算法
算法定义
算法指的是一个计算过程 ,解决问题的方法
常见算法
冒泡排序 选择排序 插入排序 快速排序 归并排序 希尔排序
重点掌握冒泡和快排
1. 衡量算法的标准
时间负责度
算法的时间复杂度是一个函数,它定性描述该算法的运行时间 常用大O符号来表示 实际操作中通常指的是代码运行的次数
O(1) < O(logn) < O(n) < O(nlogn) < O(n2)<O(n2logn)<O(n3)
如何一眼判断时间复杂度?
■循环减半的过程--->O(logn)
■几次循环就是n的几次方的复杂度
空间负责度
空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度,记做S(n)=O(f(n))。
2. 各种算法
冒泡排序 (重要)
列表每组两个相邻的数 如果前边的比后边的大 那么就交换两个数
# 时间复杂度 O(n^2) def bubble_sort(data): # 判断是不是列表类型 if isinstance(data,list): for i in range(len(data)): # 假定给的列表就是有序的 就不需要再走后面的逻辑了 flag = True for j in range(len(data)-1): if data[j] > data[j+1]: data[j],data[j+1] = data[j+1],data[j] flag = False # 给的列表有序 if flag: return else: raise TypeError li = [1,5,3,6,2,4,9,8,7] bubble_sort(li) print(li) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
快排(重要)
时间复杂度: O(nlogn)
思路: 递归 对比 看动图
将左边的第一个数作为一个常数 然后将最右边的数和常数对比 如果比他大 继续往左移动一位继续对比
def quickSort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] print(pivot) left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quickSort(left) + middle + quickSort(right) print(quickSort([3,6,8,10,1,6,2,1]))