快速排序实现(python)

本文深入讲解了快速排序算法的四个核心步骤,包括选取基准点、分区处理、递归调用及终止条件,并提供了详细的Python代码实现,展示了如何通过递归方式高效地完成排序任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序总体上有四个步骤:

  1. 选取一个项为基准点(pivot);
  2. 将列表中的项进行分区处理,把比基准点小的数字放到基准点的左侧,比基准点大的点放到基准点的右侧。所以此时,尽管其他项是乱的,但基准点的位置已经被确定,即基准点的位置已经排序完毕;
  3. 分而治之,将列表划分割为更小的列表,将基准点左右部分分别作为子列表重复进行第一步的操作,取一个点作为基准点进行排序;
  4. 每次遇到少于俩个项的子列表就结束这个过程;
    根据以上四点发现快速排序这个过程可以由递归来实现。

代码如下:

import random

def quicksort(listp) :
    quicksorthelper(listp, 0, len(listp)-1)
    #列表索引从0开始

def partition(listp,left,right):
    middle = (left + right) // 2
    pivot = listp[middle]
    listp[middle] = listp[right]
    listp[right] = pivot#选取最中间的为基准点并将其调换到最后
    boundary = left
    for index in range(left , right):
        if listp[index] < pivot:
            swap(listp,index,boundary)
            boundary+=1
    swap(listp,boundary,right)
    return boundary

def swap(listp, index, boundary):
    temp = listp[index]
    listp[index] = listp[boundary]
    listp[boundary] = temp

def quicksorthelper(listp, left, right) :
    if left < right:
        pivotlocation=partition(listp, left, right)
        quicksorthelper(listp, left, pivotlocation-1)#pivotlocationn处已经排序完毕
        quicksorthelper(listp, pivotlocation+1, right)

a=[]
for i in range(50):
    a.append(random.randint(0, 100))
print(a)
print('\n')
quicksort(a)
print(a)

这里的不足之处在于选取的基准点过于特殊,每次都是中间的那个,有较大可能使得算法时间复杂度为最高的,我们可以采取用random生成随机基准点。
另外quicksorthelp的作用是对快速排序算法进行一个封装,隐藏递归调用的额外参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值