zoukankan      html  css  js  c++  java
  • 算法入门

    算法入门

    冒泡排序,每一次循环把最大的数放到列表最后

    data = [84984,4566,843,8424,514,56,4564,4561,31,5,18,1,6514564,94,48,54,1231,45]
    count = 0   						#计数器,记录循环次数
    for j in range(1, len(data)):       #每次循环排除最后一个最大的数进入下次循环,不能直接用data循环,因为data读入内存后,直接操作data会产生一个新的内存地址保存修改后的数据,造成程序紊乱!
        for i in range(len(data)-j):    #用列表长度进行循环这个循环会把最大的数放在列表最后的位置,通过上一层循环排除最后一个,就可以做到从小到大排列
            if data[i] > data[i+1]:
                tmp = data[i+1]
                data[i+1] = data[i]
                data[i] = tmp
                count += 1
    print(data,count)
    

    递归

    def calc(n):
        if n/2 > 1:
            res = calc(n/2)
            print("res", res)
            #return n
        print("n:", n)
        return n
    calc(10)
    

    递归就是重复的执行函数自身,递归的函数会一层一层的进入下一个函数执行,
    退出也是一层一层的退出.在注释的地方return就会直接从最里面的一层函数跳出

    斐波那契数列

    def func(arg1, arg2, stop):
        if arg1 > 0 :
            print(arg1, arg2)
        arg3 = arg1 + arg2
        print(arg3)
        if arg3 < stop:
            func(arg2, arg3,stop)
    func(2, 5, 1000)
    

    二分法,只能查找有序序列.

    def binary_search(data, find_num):
        mid = int(len(data)/2)
        if len(data) >= 1:
    
            if data[mid] > find_num:
                binary_search(data[:mid], find_num)
            elif data[mid] < find_num:
                binary_search(data[mid:], find_num)
            else:
                print(data[mid])
        else:
            print("cannot find...")
    
    li = list(range(1,9999999))
    binary_search(li, 2311)
    

    2维数组旋转

    data = [[i for i in range(4)] for j in range(4)]
    for i in data:
        print(i)
    

    [0, 1, 2, 3]

    [0, 1, 2, 3]

    [0, 1, 2, 3]

    [0, 1, 2, 3]

    for row_index,row in enumerate(data):
        for col_index in range(row_index, len(row)):
            tmp = data[col_index][row_index]
            data[col_index][row_index] = row[col_index]
            data[row_index][col_index] = tmp
    
    for i in data:
        print(i)
    

    [0, 0, 0, 0]

    [1, 1, 1, 1]

    [2, 2, 2, 2]

    [3, 3, 3, 3]

    for i in range(len(data)):
        a = [data[i][i] for row in range(4)]
        print(a)
    

    时间复杂度T(n)

    指数时间:数据线性增长,程序执行时间指数成长O(n2)
    常数时间:相当与已知数据的位置去读取数据所花时间 O(n)
    对数时间:常见二叉树和二分搜索,数据增长对执行时间影响不大O(log n)
    线性时间:运行时间和数据增长成线性关系, O(n)

  • 相关阅读:
    逆向实战干货,植物大战僵尸快速定位自动捡阳光Call,或者标志
    常见注入手法第二讲,APC注入
    Polipo
    Tinyproxy
    Varnish Cache
    jxls-1.x导出excel入门——基本操作
    【Hutool】Hutool工具类之日期时间工具——DateUtil
    SVN-Tips
    Java使用POI导出excel(下)——实例与小技巧
    Linux入门进阶第三天——软件安装管理(下)
  • 原文地址:https://www.cnblogs.com/ops-sylar/p/6402770.html
Copyright © 2011-2022 走看看