什么是算法:
算法:一个计算过程,解决问题的方法。
时间复杂度:
1.用来评估算法运行效率的一个东西。
2.时间复杂度是用来估计算法运行时间的一个式子(单位).
3.一般来说,时间复杂度高的算法比复杂度低的算法慢。
4.常见的时间复杂度(按效率排序),
nO(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n2logn)<O(n3)
5.不常见的时间复杂度
nO(n!) O(2n) O(nn) …
o如何一眼判断时间复杂度?
n循环减半的过程àO(logn)
n几次循环就是n的几次方的复杂度
空间复杂度:用来评估算法内存占用大小的一个式子。
冒泡排序思路:
1.首先,列表每两个相邻的数,如果前面的比后面的大,那么就交换这两个数。。。。。。
代码关键点:
1.趟(就是总共需要循环多少趟)
2.无序区。
冒泡排序代码,时间复杂度O(n2)
#! /usr/bin/env python # encoding: utf-8 import time import random #冒泡 def li1(func): def inner(*args, **kwargs): a = time.time() func1 = func(*args, **kwargs) b = time.time() c = b - a print(c) return func1 return inner @li1 def bin_sort(li): # 遍历的趟数,因为每遍历一趟,就会找到一个复合要求的值,那么趟数就会少一次,-1 for i in range(len(li) - 1): tag = False # 每遍历一次趟数,就会找到一个满足条件的值,下次在排序的时候,不符合条件的值就会减少一个 # 用列表的长度-遍历的趟数-1(1可以理解为:每次查找到一个符合条件到值以后,他到下一个比较到值的下标就会-1, # 也可以理解为:每满足一个排序条件后,列表的值就会少一个 -1) for j in range(len(li) - i - 1): # print("9", j) if li[j] > li[j+1]: tag = True li[j], li[j+1] = li[j+1], li[j] if not tag: break return li