partition

本文详细介绍了快速排序中分区算法的实现原理与过程。通过具体的Python代码示例,阐述了如何利用分区算法将数组分为两部分,使得左边的元素都不大于基准值,而右边的元素都不小于基准值。

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

作用

partitionpartition的作用是确定一个数字的最终位置。

模板

代码如下:

def partition(self, A, n, first, last):
        while first <= last:
            while first <= last and A[first] <= n: first += 1
            while first <= last and A[last] > n: last -= 1
            if first <= last: A[first], A[last] = A[last], A[first]
        return last

这样得到的结果,小于等于nn的数字全都在左边,大于等于n的位置全都在右边,得到的lastlast是小于等于nn的最右边位置,first是大于nn的最左边位置。

应用

快排中的partition用到了这个算法。
代码如下:

class QuickSort:
    def partition(self, A, first, last):
        tmp = A[first]
        firstIndex = first
        while first <= last:
            while first <= last and A[first] <= tmp: first += 1
            while first <= last and A[last] > tmp: last -= 1
            if first <= last: A[first], A[last] = A[last], A[first]
        A[firstIndex], A[last] = A[last], A[firstIndex]
        return last
    def sort(self, A, first, last):
        if first >= last: return
        part = self.partition(A, first, last)
        self.sort(A, first, part - 1)
        self.sort(A, part + 1, last)
    def quickSort(self, A, n):
        # write code here
        self.sort(A, 0, n - 1)
        return A

注意,因为这段代码中的partitionpartition用的A[first]A[first],所以最后需要把A[first]A[first]的值交换到最右边的lastlast位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值