冒泡,选择,二分法

# 冒泡排序
li = [1,3,5,4,2]
# 从大到小排序
# 冒泡排序的原理时 两个数相比 如果顺序不对就交换位置
"""
​
3 5 4 2              1
5 4 3                2
5 4                  3
5                    4
                     5
# 每一圈 两两相比 会产生一个最小值 放到列表的最末尾
"""
for j in range(len(li) -1):
    for i in range(len(li)-1):
        if li[i] > li[i+1]: # 如果前一个比后一个小就交换位置
            # 交换位置
            li[i],li[i+1] = li[i+1],li[i]
print(li)
# 选择排序
li = [1,3,5,4,2]
# 从大到小
# 原理:每次从未排序的元素中找到一个最大值把它与第一个未排序的位置交换
"""
1 3 5 4 2
5 3 1 4 2
5 4 1 3 2
5 4 3 1 2 
5 4 3 2 1
"""
​
for j in range(len(li)-1):
    # 假设第1个元素就是最大值
    max_index = j
    for i in range(j+1,len(li)):
        if li[i] > li[max_index]:
            max_index = i
​
    # 交换位置
    li[j],li[max_index] = li[max_index],li[j]
print(li)

# 递归二分法
lst = [1, 3, 5, 7, 13, 15, 17, 19, 21, 23, 27, 29, 31, 33, 39, 41, 43, 47, 49]
def func(n, lst, left, right):
    if left <= right:
        middle = (left + right) // 2
        if n > lst[middle]:
            left = middle + 1
            return func(n, lst, left, right)
        elif n < lst[middle]:
            right = middle - 1
            return func(n, lst, left, right) # 递归如果有返回值. 所有调用递归的地方必须写return
        else:
            print("找到了")
            return middle
    else:
        print('没有找到')
        return -1
n = int(input('请输入一个数:'))
func(n,lst,0,len(lst)-1)

猜你喜欢

转载自blog.csdn.net/qq_36811322/article/details/87600535