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)

猜你喜欢

转载自blog.csdn.net/weixin_44298535/article/details/107621487
今日推荐