zoukankan      html  css  js  c++  java
  • 舞动排序:快速排序

    排序思想

    第一步:在数列中随意选取一个数,做为基准值;

    第二步:数组中剩下的数与基准值依次比较,小于基准值的数放左边,大于基准值的数放右边;

    第三步:左右两边的数重复第一第二步,直至排序完成

    排序特点

    1.稳定性:快排是一种不稳定排序,比如基准值的前后都存在与基准值相同的元素,那么相同值就会被放在一边,这样就打乱了之前的相对顺序

    2.比较性:因为排序时元素之间需要比较,所以是比较排序

    3.时间复杂度:快排的时间复杂度为O(nlogn)

    4.空间复杂度:排序时需要另外申请空间,并且随着数列规模增大而增大,其复杂度为:O(nlogn)

    5.归并排序与快排 :归并排序与快排两种排序思想都是分而治之,但是它们分解和合并的策略不一样:归并是从中间直接将数列分成两个,而快排是比较后将小的放左边大的放右边,所以在合并的时候归并排序还是需要将两个数列重新再次排序,而快排则是直接合并不再需要排序,所以快排比归并排序更高效一些,可以从示意图中比较二者之间的区别。

    6.快速排序有一个缺点就是对于小规模的数据集性能不是很好。

    不明白?跳个舞吧https://www.bilibili.com/video/BV1Px411L7Tq

    def quick_sort(sort_list):
        # 判断排序数列长度,是后面递归的出口
        if len(sort_list) < 2:
            return sort_list
        # 选数列的第一个数为基准值
        first = sort_list[0]
        # 定义基准值左右两个数列
        left, right = [], []
        # 从原始数列中移除基准值
        sort_list.remove(first)
        for i in sort_list:
            # 小于等于基准值的数,放左边
            if i <= first:
                left.append(i)
            else:
                # 大于基准值放右边
                right.append(i)
        # 使用递归,对左右两个数列进行快排
        return quick_sort(left) + [first] + quick_sort(right)
    
    
    a = [12, 32, 1, 2, 300, 33, 0]
    print(quick_sort(a))
  • 相关阅读:
    前端性能优化成神之路--图片懒加载(lazyload image)
    前端性能优化成神之路-异步加载
    浮动布局详解
    布局:上下两个div高度固定,中间自适应
    盒子模型和弹性盒子模型的详解
    CSRF攻击详解
    使用Base64格式的图片制作ICON
    如何让父元素有透明度,但里面的子元素不透明
    父级元素以及子元素高度宽度未知如何实现水平垂直居中
    php file文件操作函数
  • 原文地址:https://www.cnblogs.com/dc2019/p/13611031.html
Copyright © 2011-2022 走看看