Python 斐波那契数列, 二分法查找 , 冒泡排序

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

func(0,1,300)

 

斐波那契数列   第一个数 + 第二个数 =  第三个数。   一直循环

 

 

 

 

 

 二分法查找。

def search(data_source, find_n):
    mid = int(len(data_source)/2)
    if len(data_source) >= 1:
        if data_source[mid] > find_n:
            print('data in left of [%s]'% data_source[mid])
            search(data_source[:mid], find_n)
        elif data_source[mid] < find_n:
            print('data in right of [%s]'% data_source[mid])
            search(data_source[mid:], find_n)
        else:
            print('found find_s', data_source[mid])
    else:
        print('cannot find')

if __name__ == "__main__":
    data = list(range(1,5000))
    search(data,4001)

 

首先对 列表 进行 除2 , 然后进行比较大小,大于取左边,然后对列表进行切片[:mid], 小于取右边,然后对列表进行切片[mid:], 如此循环。

对列表进行除2 时 使用 len 。

 

 

 

 

冒泡排序法

 

data = [2,3,4,23,4324,5,6,7,435,43543,2,234,423,66,88,999,1,9999]

for j in range(1,len(data)):         # len 从1开始, 每次循环都递减1次,因为 每次循环都会将 最大的值 排序到最后。
    for i in range(len(data)-j):     # 循环 range 列表 的 len  - j  j = 循环的次数, 可减少 循环次数。 
        if data[i] > data[i+1]:      #  第一个数 与 第二个数 做比较, 如果 第一个比第二个大 走下一步
            tmp = data[i+1]      #  tmp = data[i+1]  让 tmp 临时 等于 第二个数
            data[i+1] = data[i]    #  data[i+1]  第二个数 替换成 第一个 数
            data[i] = tmp            # 第一个数 替换成 tmp 。
print(data)

 

posted @ 2016-06-27 11:53  丶小炒肉  阅读(261)  评论(0)    收藏  举报