测试第二个月:算法

斐波那契:

def fun(i):
    if i == 0:
        return 0
    elif i == 1:
        return 1
    else:
        return fun(i-2)+fun(i-1)
if __name__ == '__main__':
    for i in range(10):
        print(fun(i),end=" ")

直角三角形:

for i in range(6):
    i += 1
    for j in range(i):
        print('*', end='')
    print()

等边三角形:

for i in range(1,6):
    for j in range(1,6-i):
        print(" ",end="")
    print("* "*i)
for i in range(1,6):
    for j in range(1,6-i):
        print(" ",end="")
    for k in range(1,i+1):
         print("* ",end="")
    print("")

选择排序:

def func(alist):
    # x就是1到传过来的这个参数的总长度
    for x in range(0,len(alist)):

        # min_num 就等于每次循环的小标对应数字
        min_num = alist[x]

        # 循环小标x+1 到所有下标长度
        for i in range(x+1,len(alist)):
            # 如果下标i的参数大于min_num
            if alist[i] < min_num:
                # 互换位置(参数互换)
                alist[i],min_num = min_num,alist[i]
        alist[x] = min_num
    return alist

print(func([1,55,22,66,44,22,88]))

冒泡排序:

def func(alist):
    for x in range(1,len(alist)):   #  x 就是  1 到 传过来的这个参数的长度总值
        for i in range(0,len(alist)-x):  #  i 就是 传过来的列表长度 - 去  x
            if alist[i] > alist[i+1]:  #  如果下标i  小于i+1
                alist[i], alist[i+1] = alist[i+1], alist[i]   # 那么  下标i  与 下标 i+1  互换位置 
    return alist  #  返回排序后的列表
print(func([1,4,2,3,6,7,8,9,0,5]))  #  输出   func([1,4,2,3,6,7,8,9,0,5])  这句话就是 向func函数中传递参数

二分查找:

def binnry_search(alist,item):
    # 构造初始下标和结束下标
    first = 0
    last = len(alist)-1
    # 构造循环比较条件
    while first <= last:
        # 构造中间值下标
        mid = (first+last) // 2
        # item (要查找的元素)  和中间值下标对应的元素进行比较 查询到后直接返回值
        if item == alist[mid]:
            # 返回查询到的值
            return True,alist.index(item)
        else:
            if item > alist[mid]:
                first = mid + 1
            else:
                last = mid - 1

    return False

if __name__ == '__main__':
    a_list = [-22,-11,0,11,22,33,38,44,55,57,66,72,81,96,123456]
    print(binnry_search(a_list,44))

通过迭代查询中间值:

def fun(alist,item):
    if len(alist) == 0:
        return False
    else:
        mid = len(alist) // 2   #获取中间值的下标
        if item == alist[mid]:
            return True,item
        elif item < alist[mid]: # 如果查找的数小于中间值
            return fun(alist[:mid],item)    #从开头到中间值查询  [:mid]是中间值66往前得数
        else:
            return fun(alist[mid+1:],item) #   否则从中间值下一个数到结尾

# 输出返回的值
print(fun([1,  22,33,44,55,66,77,88,99],66))

二分法:

def func(alist, item):
    low = 0
    high = len(alist)-1
    n = 0
    while low <= high:
        mid = int((low + high)/2)
        n += 1
        if alist[mid]==item:
            return mid
        if alist[mid]<item:
            low = mid + 1
        else:
            high = (mid-1)
    return None

m=[1,2,3,4,8,9,11,12,14,18,19,20,28]
print(func(m,14))

 

posted @ 2020-12-16 21:34  敏敏小朋友  阅读(103)  评论(0)    收藏  举报