zoukankan      html  css  js  c++  java
  • Python—快速排序算法

    # _*_ coding=utf-8 _*_
    
    
    """
    快速排序:
        通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比
        另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
        整个排序过程可以递归进行,以此达到整个数据变成有序序列。
    时间复杂度:
        快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),
    且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。
    所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。
    """
    
    
    def partition(arr, left, right):
        """
        1.从数列中挑出一个元素,称为 "基准"(pivot);
        2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。
          在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
        :param arr: 列表
        :param left: 挑出元素的index
        :param right: 列表最大index
        :return:
        """
        pivot = arr[left]
        while left < right:                                 # 列表最少存在2个元素
            while left < right and arr[right] >= pivot:     # 找到右边比pivot小的元素
                right -= 1
            arr[left] = arr[right]                          # 将在此元素放在left的位置
            while left < right and arr[left] <= pivot:      # 找到左边比pivot大的元素
                left += 1
            arr[right] = arr[left]                          # 将此元素放在right的位置
        arr[left] = pivot                                   # left=right,此元素已经归位
        return left
    
    
    def quick_sort(arr, left, right):
        """
        3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;
        :param arr:
        :param left:
        :param right:
        :return:
        """
        if left < right:                                    # 列表最少存在2个元素
            mid = partition(arr, left, right)
            quick_sort(arr, left, mid - 1)
            quick_sort(arr, mid + 1, right)
        return arr
    
    
    if __name__ == '__main__':
        li = [1, 2, 3, 4, 5, 55, 6, 3, 4, 5, 6]
        new_arr = quick_sort(li, 0, len(li) - 1)
        print(new_arr)
  • 相关阅读:
    C/S模式客户端连接服务器连接不上的问题
    C#获取网络状态
    SQL2008R转SQL2005
    Centos7 调整磁盘空间
    crontab 定时任务
    nginx 简单教程
    vagrant 使用
    加快 hive 查询的 5 种方法
    编译 ambari 2.7.3
    kylin 连接 hortonworks 中的 hive 遇到的问题
  • 原文地址:https://www.cnblogs.com/zivli/p/11206269.html
Copyright © 2011-2022 走看看