算法入门

算法入门

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

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)

posted @ 2017-02-15 18:40  ops_sylar  阅读(345)  评论(0编辑  收藏  举报