AYE89

coding & learning

导航

快速排序Python实现

Posted on 2018-04-08 23:33  AYE89  阅读(366)  评论(0编辑  收藏  举报

本文用python语言介绍三种不同的快排实现。

1. 一行代码实现的简洁版本

 

[python] view plain copy
 
  1. quick_sort = lambda array: array if len(array) <= else quick_sort([item for item in array[1:] if item <= array[0]]) + [array[0]] + quick_sort([item for item in array[1:] if item > array[0]])  
  2.       

2. 网上常见的快排实现

 

[python] view plain copy
 
  1. def quick_sort(array, left, right):  
  2.     if left >= right:  
  3.         return  
  4.     low = left  
  5.     high = right  
  6.     key = array[low]  
  7.     while left < right:  
  8.         while left < right and array[right] > key:  
  9.             right -= 1  
  10.         array[left] = array[right]  
  11.         while left < right and array[left] <= key:  
  12.             left += 1  
  13.         array[right] = array[left]  
  14.     array[right] = key  
  15.     quick_sort(array, low, left - 1)  
  16.     quick_sort(array, left + 1, high)  

由于快排是原地排序,因此不需要返回array。

array如果是个列表的话,可以通过len(array)求得长度,但是后边递归调用的时候必须使用分片,而分片执行的原列表的复制操作,这样就达不到原地排序的目的了,所以还是要传上边界和下边界的。

3.《算法导论》中的快排程序

[python] view plain copy
 
  1. def quick_sort(array, l, r):  
  2.     if l < r:  
  3.         q = partition(array, l, r)  
  4.         quick_sort(array, l, q - 1)  
  5.         quick_sort(array, q + 1, r)  
  6.   
  7. def partition(array, l, r):  
  8.     x = array[r]  
  9.     i = l - 1  
  10.     for j in range(l, r):  
  11.         if array[j] <= x:  
  12.             i += 1  
  13.             array[i], array[j] = array[j], array[i]  
  14.     array[i + 1], array[r] = array[r], array[i+1]  
  15.     return i + 1