Python笔记9-冒泡、选择排序、顺序、二分查找

一、简单算法【面试题】

1.冒泡排序

排序思路:比较两个相邻的下标对应的元素,如果符合条件就交换位置

# 冒泡排序

# 1.升序排序
numlist = [24,56,78,8,7,100,45,56,7,8]

# 外层循环:控制的是比较的轮数
for i in range(len(numlist) - 1):
    # print("轮数:",i)
    # 内层循环:控制的是每一轮比较的次数,兼顾索引
    for j in range(len(numlist) - 1 - i):
        # 进行比较,如果符合条件则交换位置
        # 条件:索引小的元素  >  索引大的元素
        # print("比较的索引为:",j,j + 1)
        if numlist[j] > numlist[j + 1]:
            numlist[j],numlist[j + 1] = numlist[j + 1],numlist[j]
print(numlist)

print("*" * 50)

# 2.降序排序
numlist = [24,56,78,8,7,100,45,56,7,8]

# 外层循环:控制的是比较的轮数
for i in range(len(numlist) - 1):
    # 内层循环:控制的是每一轮比较的次数,兼顾索引
    for j in range(len(numlist) - 1 - i):
        # 进行比较,如果符合条件则交换位置
        # 条件:索引小的元素  >  索引大的元素
        if numlist[j] < numlist[j + 1]:
            numlist[j],numlist[j + 1] = numlist[j + 1],numlist[j]
print(numlist)


# 3
numlist = [24,56,78,8,7,100,45,56,7,8]
numlist.sort()  # 升序
print(numlist)

numlist = [24,56,78,8,7,100,45,56,7,8]
numlist.sort(reverse=True)  # 降序
print(numlist)

# 自学:插入排序,快速排序

2.选择排序

排序思路:固定一个下标,然后拿这个下标对应的元素依次和后面的元素进行比较,如果符合条件就交换位置

# 选择排序

# 1.升序排序
numlist = [24,56,78,8,7,45,67,67,8,100,88]

# 外层循环:控制的是比较的轮数
for i in range(len(numlist) - 1):
    # print("轮数:",i)
    # 内层循环:控制的是每一轮比较的次数,兼顾索引
    for j in range(i + 1,len(numlist)):
        # 进行比较,如果符合条件则交换位置
        # 条件:索引小的元素  >  索引大的元素
        # print("比较的索引为:",i,j)
        if numlist[i] > numlist[j]:
            numlist[i],numlist[j] = numlist[j],numlist[i]
print(numlist)

print("*" * 50)

# 2.降序排序
numlist = [24,56,78,8,7,45,67,67,8,100,88]

# 外层循环:控制的是比较的轮数
for i in range(len(numlist) - 1):
    # 内层循环:控制的是每一轮比较的次数,兼顾索引
    for j in range(i + 1,len(numlist)):
        # 进行比较,如果符合条件则交换位置
        # 条件:索引小的元素  >  索引大的元素
        if numlist[i] < numlist[j]:
            numlist[i],numlist[j] = numlist[j],numlist[i]
print(numlist)

3.顺序查找

查找思路:将待查找元素和列表中的元素进行依次比较,如果相等,则表示查找成功

# 顺序查找

numlist = [24,56,78,8,7,45,67,67,8,100,88]
ele = 66

# 1.index()
# index1 = numlist.index(ele)
# print(index1)

# 2.
for index2 in range(len(numlist)):
    if numlist[index2] == ele:
        print("索引:",index2)


# 3.模拟index()
for index2 in range(len(numlist)):
    if numlist[index2] == ele:
        print("索引:",index2)
        break
else:
    print("待查找元素不存在")

4.二分法查找

查找思路:升序的前提下,将待查找的元素与中间下标对应的元素比较,如果大于中间下标对应的元素,则去右半部分查找

注意:前提是列表是有序(升序或者降序)的,通过折半来缩小查找范围,提高查找效率

# 二分法查找


# 1.列表是升序
numlist = [24,56,78,8,7,45,67,67,8,100,88]
print(numlist)
numlist.sort()
print(numlist)

ele = 78

left = 0
right = len(numlist) - 1

while left <= right:
    # 计算中间下标
    middle = (left + right) // 2
    # 比较中间下标对应的元素和待查找元素的大小
    if ele > numlist[middle] :
        # 右半部分,给left重新赋值
        left = middle + 1
    elif ele < numlist[middle]:
        # 左半部分,给right重新赋值
        right = middle - 1
    else:
        # 相等
        print(middle)
        # 只要找到结果,则可以提前结束循环
        break
else:
    print("待查找元素不存在")

print("*" * 50)

# 2.列表是降序
numlist = [24,56,78,8,7,45,67,67,8,100,88]
numlist.sort(reverse=True)
ele = 78

left = 0
right = len(numlist) - 1

while left <= right:
    # 计算中间下标
    middle = (left + right) // 2
    # 比较中间下标对应的元素和待查找元素的大小
    if ele > numlist[middle] :
        # 左半部分,给right重新赋值
        right = middle - 1
    elif ele < numlist[middle]:
        # 右半部分,给left重新赋值
        left = middle + 1
    else:
        # 相等
        print(middle)
        # 只要找到结果,则可以提前结束循环
        break
else:
    print("待查找元素不存在")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值