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

# 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))

posted @   yy9knsg  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示