Python课程第六天_下午_课程笔记(排序算法 Sorting_Algorithm)(冒泡排序&选择排序)

Day_06_PM_Sorting_Algorithm

# 冒泡排序(掌握其中一个)

'''
原理:
            [9, 7, 6, 8, 5, 4, 3, 2, 1]
    第一次(i = 0, j = 9 - i - 1)     [9, 7, 6, 8, 5, 4, 3, 2, 1]  => [7, 6, 8, 5, 4, 3, 2, 1, 9]
    第二次(i = 1, j = 9 - i - 1)     [7, 6, 8, 5, 4, 3, 2, 1, 9]  => [6, 7, 5, 4, 3, 2, 1, 8, 9]
    第三次(i = 2, j = 9 - i - 1)     [6, 7, 5, 4, 3, 2, 1, 8, 9]  => [6, 5, 4, 3, 2, 1, 7, 8, 9]
    第四次(i = 3, j = 9 - i - 1)     [6, 5, 4, 3, 2, 1, 7, 8, 9]  => [5, 4, 3, 2, 1, 6, 7, 8, 9]
    第五次(i = 4, j = 9 - i - 1)     [5, 4, 3, 2, 1, 6, 7, 8, 9]  => [4, 3, 2, 1, 5, 6, 7, 8, 9]
    第六次(i = 5, j = 9 - i - 1)     [4, 3, 2, 1, 5, 6, 7, 8, 9]  => [3, 2, 1, 4, 5, 6, 7, 8, 9]
    第七次(i = 6, j = 9 - i - 1)...
    第八次(i = 7, j = 9 - i - 1)...
'''

# 相邻的比较不能遍历最后一个(后面没数了)
# 减多一个i是因为最右边的已经是最大数了不需要比了,减i可以跳过遍历后面遍历过的(也可以不减i就是遍历次数会多)

nums = [9, 7, 6, 8, 5, 4, 3, 2, 1]
for i in range(len(nums) - 1):  # i = 0, 1, 2 ,3, 4, 5, 6, 7

    for j in range(len(nums) - 1 - i):
        if nums[j] > nums[j + 1]:  # > 升序, < 降序
            nums[j], nums[j + 1] = nums[j + 1], nums[j]

print(nums)

# 选择排序
'''
原理:
                [9, 7, 6, 8, 5, 4, 3, 2, 1]
        第一次(i=0)     [9, 7, 6, 8, 5, 4, 3, 2, 1]  =>  [1, 7, 6, 8, 5, 4, 3, 2, 9]
        第一次(i=1)     [1, 7, 6, 8, 5, 4, 3, 2, 9]  =>  [1, 2, 6, 8, 5, 4, 3, 7, 9]
        以此类推...

'''
nums = [9, 7, 6, 8, 5, 4, 3, 2, 1]
for i in range(len(nums) - 1):  # i = 0, 1, 2 ,3 ,4 ,5 ,6, 7

    # 求剩下数中最小数的下标
    min_index = i  # 剩下没排的数的第一个
    for j in range(i, len(nums)):
        if nums[j] < nums[min_index]:
            min_index = j  # 求最小数的下标

    # 用最小数和第i个元素交换(i是剩下数当中的第一个)
    nums[i], nums[min_index] = nums[min_index], nums[i]
print(nums)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值