# 本篇代码改写自算法导论
# 对l和r位置之间的array进行快排
def quick_sort(array, l, r):
# 确认l比r小
if l < r:
# partition函数返回的是i+1,基准值的新位置,赋值给q
q = partition(array, l, r)
# 对基准值的新位置的左右两侧分别进行快排,quick_sort内部又包含了一次新的partition
quick_sort(array, l, q - 1)
quick_sort(array, q + 1, r)
# 定义分割函数,以及array的左右端点l,r
def partition(array, l, r):
# 将array的最右侧元素定义为x,也就是基准值
x = array[r]
# i定义为最左侧位置的前一个位置,因为运行第一步的时候i就要+1
i = l - 1
# j是依次增加
for j in range(l, r):
# 如果第j个元素小于基准值
if array[j] <= x:
# i+1,第一步时,i=l,j也=l
i += 1
# 交换i和j的元素,保证左边的都小于等于基准值
# 如果j位置比较大,则i也不会+1,所以最后i的位置表明了有多少个数小于基准值
array[i], array[j] = array[j], array[i]
# 将最右侧的(也就是基准值)和i+1位置调换,保证左边都比基准值小,右边都大
array[i + 1], array[r] = array[r], array[i + 1]
# 返回的是基准值的新位置
return i + 1
Python实现快速排序
最新推荐文章于 2024-05-16 09:11:43 发布