7. 数据结构与算法:快速排序

快速排序(quick sort)是一种分治排序算法。该算法首先 选取 一个划分元素(partition element,有时又称为pivot);接着重排列表将其 划分 为三个部分:left(小于划分元素pivot的部分)、划分元素pivot、right(大于划分元素pivot的部分),此时,划分元素pivot已经在列表的最终位置上;然后分别对left和right两个部分进行 递归排序。

其中,划分元素的 选取 直接影响到快速排序算法的效率,通常选择列表的第一个元素或者中间元素或者最后一个元素作为划分元素,当然也有更复杂的选择方式;划分 过程根据划分元素重排列表,是快速排序算法的关键所在,该过程的原理示意图如下:

quicksort.png
def partition(L, first, last):
  pivot = L[first]
  leftmark = first + 1
  rightmark = last 

  while True:
    while L[leftmark] < pivot:
      if leftmark = = rightmark:
        break
      leftmark + =1
  
    while L[rightmark] > pivot
      rightmark -=1

    if leftmark < rightmark:
      L[leftmark], L[rightmark] = L[rightmark], L[leftmark]
    else:
      break
L[leftmark], L[rightmark] = L[rightmark], L[leftmark]

return return rightmark

def qsort(L, first, last):
    if first < last:
        split = partition(L, first, last)
        qsort(L, first, split - 1)
        qsort(L, split + 1, last)

def stdQuicksort(L):
    qsort(L, 0, len(L) - 1)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如需转载, 请咨询作者, 并且注明出处.有任何问题, 可以关注我的微博: coderwhy, 或者添加我的微信: ...
    coderwhy阅读 8,032评论 30 13
  • 数据结构 Java中的数组有差不多一样的语法。只是java中处理8种基本类型,数组也是作为对象处理的,所以创建对...
    赵宇_阿特奇阅读 752评论 0 0
  • 1、常用排序算法 2、快速排序法 基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比...
    Bling_ll阅读 567评论 0 0
  • 我花费了整整二十年将自己送进“211”大学, 又用4年时间堪堪毕业,接着不到半年考进国家系统,然后就没有然后。 两...
    木行一阅读 307评论 0 0
  • 仓库里的人议论纷纷,产生了各种猜测。 打包员11的版本是这样的—— 他拉过我刚检查完的箱子,箱子里的物品,包括一个...
    八根草阅读 272评论 0 0