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

    像归并排序一样,快速排序也使用分治模式(因此也是用递归)

    1.1快排与归并的区别:

    快速排序按照原址工作,快速排序渐进运行时间介于最坏情况和平均情况之间。尤其是快排的最坏运行时间是θ(n^2), 但是他的平均情况下的运行时间要更好一些。
    快速排序也有好的常数因子(比归并排序要好一点),并且它通常是实践中的一个好的排序算法。

    1.2流程:

    1.3程序实现:

     1 def quickSort(arr):
     2     left = []
     3     pivotList = []
     4     right = []
     5     if len(arr) <= 1:
     6         return arr
     7     else:
     8         pivot = arr[0]      #将第一个值做为基准
     9         for i in arr:
    10             if i < pivot:
    11                 left.append(i)
    12             elif i > pivot:
    13                 right.append(i)
    14             else:
    15                 pivotList.append(i)
    16 
    17         left = quickSort(left)      #得到第一轮分组之后,继续将分组进行下去。
    18         right = quickSort(right)
    19 
    20         return left + pivotList + right

    还有一句话的版本:
    qs = lambda xs : ( (len(xs) <= 1 and [xs]) or [ qs( [x for x in xs[1:] if x < xs[0]] ) + [xs[0]] + qs( [x for x in xs[1:] if x >= xs[0]] ) ] )[0]
  • 相关阅读:
    evernote100个做笔记的好方法
    平衡二叉树的调整模版
    晨间日记的奇迹
    hdu 2952 Counting Sheep
    hdu 1535 Invitation Cards
    poj 3259 Wormholes(spfa)
    poj 2263 Heavy Cargo(floyd)
    poj 3268 Silver Cow Party(SPFA)
    hdu 1690 Bus System
    hdu 3631 Shortest Path(Floyd)
  • 原文地址:https://www.cnblogs.com/zenan/p/8743449.html
Copyright © 2011-2022 走看看