• 算法


    什么是算法:

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

    时间复杂度:

    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
  • 相关阅读:
    [HNOI2014]江南乐
    烦人的数学作业(数位dp)
    http2.0请求springboot接口
    01背包动态规划
    坑点总结
    [机房测试] 堆石子
    [机房测试] 出租车
    [机房测试] 下棋
    [机房测试] number
    [CSP-S2019] 树的重心
  • 原文地址:https://www.cnblogs.com/YingLai/p/6906804.html
Copyright © 2020-2023  润新知