• Pythonic版冒泡排序和快速排序(附:直接插入排序)


    [本文出自天外归云的博客园]

    冒泡排序:就是每次排序选最大元素到数组a的最后,排 len(a)-1 次。也就是两个for循环:

      1. 外层是待排数组长度的循环,从待排数组长度(初始待排数组长度等于数组长度)到0的循环;

      2. 内层是相邻元素比较的循环,从0到待排数组长度的循环。

    快速排序:就是一个递归函数A,把数组中头元素做key,比key小的(包括相等的)放key左边,比key大的放key右边。再对左边和右边的子数组分别调用递归函数A。这是快排。

    代码如下:

    import random
    
    
    def bubble_show(func):
        def wrapper(*args):
            print(f"[{func.__name__}]")
            random.shuffle(args[0])
            print(f"Before {func.__name__}: {args[0]}")
            r = func(*args)
            print(f"After {func.__name__}: {r}")
            return r
    
        return wrapper
    
    
    @bubble_show
    # 冒泡排序
    def bubble_sort(a):
        for i in range(len(a))[::-1]:
            for j in range(0, i):
                (a[j], a[j + 1]) = (a[j + 1], a[j]) if a[j] >= a[j + 1] else (a[j], a[j + 1])
        return a
    
    
    # 快速排序
    quick_sort = lambda a: a if len(a) <= 1 else quick_sort([i for i in a[1:] if i <= a[0]]) + [a[0]] + quick_sort(
        [i for i in a[1:] if i > a[0]])
    
    if __name__ == '__main__':
        a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
        bubble_sort(a)
    
        random.shuffle(a)
        print("[quick_sort]")
        print(f"Before quick sort: {a}")
        print(f"After quick sort: {quick_sort(a)}")

    代码量确实是非常少啊~!运行结果:

     
    附:直接插入排序(不怎么pythonic,所以是附的)
    def insert_sort(numbers):
        for i in range(1, len(numbers)):
            key = numbers[i]
            j = i - 1
            while j >= 0:
                if numbers[j] > key:
                    numbers[j + 1] = numbers[j]
                    numbers[j] = key
                j -= 1
    
        print(numbers)
        return numbers
    
    insert_sort(data)
  • 相关阅读:
    ie6动态创建iframe无法显示内容的bug
    时间字符串解析
    自定义时间格式转换代码
    MySql存储过程异常处理示例
    解析数字签名的Substring结构
    自动输出类的字段及值
    深复制与浅复制的实现
    ie版本过低提示升级ie的示例
    Web安全攻防TCP/IP安全篇
    不同网段相互通信实验
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/8872941.html
Copyright © 2020-2023  润新知