#!/usr/bin/python
from sortCommon import swap
#分区函数
def partition(dataArray, left, right):
#把最后一个元素做为基准
pivot = right
#小于基准的子数组的最后一个元素的下标
tail = left - 1
for i in range(left, right):
#把小于等于基准的元素放到前一子数组的末尾
if dataArray[i] <= dataArray[pivot]:
tail+=1
swap(dataArray, tail, i)
#把基准元素放到前一个子数组的最后边,这样就保证了剩下的子数组就是大于基准的子数组
swap(dataArray, tail+1, right)
#返回基准的索引
return tail+1
#快排函数
def quickSort(dataArray, left, right):
if left>=right:
return
pivotIndex = partition(dataArray, left, right)
#递归调用
quickSort(dataArray, left, pivotIndex-1)
quickSort(dataArray, pivotIndex+1, right)
def sort(dataArray):
quickSort(dataArray, 0, len(dataArray)-1)
这边是使用递归实现快排算法,因为递归比较简洁,但递归有一个比较严重的问题就是,如果数据量大会导致调用栈非常深,在java中最直接的后果就是栈 内存溢出,python不知道会有什么后果,因为刚用python不久,有时间再试一下,并且尝试把这个算法改成迭代的实现
参考链接:
https://www.cnblogs.com/eniac12/p/5329396.html#s5