算法

什么是算法:

算法:一个计算过程,解决问题的方法。

时间复杂度:

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

 

posted @ 2017-05-26 08:44  LaniLai  阅读(178)  评论(0编辑  收藏  举报