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

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

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

7. 数据结构与算法:快速排序_第1张图片
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)

你可能感兴趣的:(7. 数据结构与算法:快速排序)