代码清单1-2 小Q修改后的冒泡排序函数

发布时间 2023-04-07 14:24:28作者: yy9knsg
# coding=utf-8



# def magic_bubble_sort(numbers):
#     num = len(numbers)
#     for j in range(num - 1):
#             print('j===', j)
#             for i in range(num - j - 1):
#                 print('i', i)
#                 if numbers[i] > numbers[i + 1]:                     
#                      numbers[i], numbers[i + 1] = numbers[i + 1], numbers[i]
#                      print(numbers[i], numbers[i + 1])
#     return numbers

def magic_bubble_sort(numbers):
    """有魔力的冒泡排序算法,默认所有的偶数都比奇数大
    :param numbers: 需要排序的列表,函数会直接修改原始列表
    """
    stop_position = len(numbers) - 1
    while stop_position > 0:
        for i in range(stop_position):
            current, next_ = numbers[i], numbers[i + 1] 
            current_is_even, next_is_even = current % 2 == 0, next_ % 2 == 0
            should_swap = False
            # 交换位置的两个条件:
            # - 前面是偶数,后面是奇数
        # - 前面和后面同为奇数或者偶数,但是前面比后面大
            if current_is_even and not next_is_even:
                should_swap = True
            elif current_is_even == next_is_even and current > next_:
                should_swap = True
            if should_swap:
                numbers[i], numbers[i + 1] = numbers[i + 1], numbers[i]
        stop_position -= 1
    return numbers


if __name__ == '__main__':
    numbers = [23, 32, 1, 3, 4, 19, 20, 2, 4]
    print(magic_bubble_sort(numbers))