Python算法之快排学习总结

本文介绍了快排的逻辑:选择基准数字,将小于基准的数放其左侧,大于的放右侧,以此进行递归排序。并提供了Python实现示例及测试结果。

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

快排的逻辑

  • 首先在这组数据中随意选择一个数字作为基准;

  • 然后比该基准小的数字在基准数字的左边,比该基准大的数字在基准数字的右边

  • 第一趟排序过后,把数据分为了两部分一部分是比基准大的数据,一部分是比基准小的数据,然后在分出来的每部分按上述步骤再排,一直排到分组中的数据只有一个或者没有数据为止

Python实现示例

# coding:utf-8
__author__ = 'tommyxie'


def kuaipai(arr, i, j):
    if i < j:
        # 调用快排函数,根据基准数据,将数据分为两部分
        base = kuaipaiprocess(arr, i, j)

        # 针对基准左侧的数据,进行递归调用快排函数,再次进行排序
        kuaipai(arr, i, base)

        # 针对基准右侧的数据,进行递归调用快排函数,再次进行排序
        kuaipai(arr, base + 1, j)


def kuaipaiprocess(arr, i, j):
    # 先选中基准数据
    basedata = arr[i]

    while i < j:
        # 当数据大于基准数据时,没有交叉变化,j指针往前移动即可
        while i < j and arr[j] >= basedata:
            j -= 1

        # 当数据小于基准数据时,会发生交叉变化,活动指针将j变换为了i
        while i < j and arr[j] < basedata:

            # 将j所指向的值,移动到i的位置
            arr[i] = arr[j]
            # 活动指针往后移动
            i += 1
            # 将i指针所指向的值移动到j的位置,保证j一直为活动指针,然后继续进行比较
            arr[j] = arr[i]

    #  将基准数据移动到i指针所在的位置
    arr[i] = basedata

    # 返回下一次基准数据所在的位置
    return i


if __name__ == '__main__':
    testdata = [1, 34, 6, 2, 5, 5, 88]
    kuaipai(testdata, 0, len(testdata) - 1)
    print(testdata)

测试结果

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值