python快速排序代码解析

本文介绍了快速排序算法的工作原理,通过将数组分为小于和大于基准值两部分,递归地进行排序。代码中详细展示了如何选取基准值,以及如何进行分区操作。此外,还提供了完整的Python代码实现,并附带了视频解析链接,帮助读者深入理解快速排序的细节和应用。
摘要由CSDN通过智能技术生成

思路:

  1. 初始化 pivot
  2. 将小于pivot的数值移动到左边,大于pivot的数值移动到右边
  3. pivot-1就是递归左边的right,pivot+1就是递归右边的right
  4. 将左边排序好之后,排序右边(二叉树前序遍历原理一样)

def quickSort(array, left, right):
    # 当只len(array) 等于 1,不需要排序
    if len(array) == 1:
        return array
    # “if left < right:” 这个是终止条件
    # 因为我们有pi的数值,当第一个分支不满足,即
    # quickSort(array, left, pivotIndex - 1)的left >= right
    # 那么尝试进入第二个quickSort,即
    # quickSort(array, pivotIndex + 1, right)
    # 判断是否满足 left < right
    # 如果都不满足,可能就会像前序遍历二叉树那样,会往上一层去判断,依次判断最终输出结果
    if left < right:
        # 类似于二叉树的前序遍历
        pivotIndex = partition(array, left, right)
        # 从pivot中间分叉,pivot两边分别代表下一个分叉的right和left
        quickSort(array, left, pivotIndex - 1)
        quickSort(array, pivotIndex + 1, right)
        print("test")

def partition (array, left, right):
    # 初始化pivot, 假设所有的初始化pivot都是array的最后一位
    pivot = array[right]
    # 初始化计数器(1.用于和小于pivot的交换;2.用于最终和末尾的pivot交换位置)
    # i = 0
    # 改进: i必须比j再往前一位,不然遇到第一个比pivot小的不好交换
    i = left - 1
    # 遍历array用于i和j交换位置,将比pivot小的放在前面
    for j in range (left, right):
        # if array[j] < pivot:
        # if array[j] < pivot: 应该考虑相等也可以
        if array[j] <= pivot:
            # i += 1
            i = i + 1
            array[j], array[i] = array[i], array[j]
    # 遍历结束后,将pivot和i的位置交换,就得到了最终pivot的位置,pivot的作用就是分割比它大的和比它小的
    array[right], array[i+1] = array[i+1], array[right]
    # renturn i + 1
    return (i+1)

if __name__ == "__main__":
    array = [1,10,2,20,3,30,4,40,6]
    n = len(array)
    # array = quickSort(array, 0, len(array)-1)
    # array = quickSort(array, 0, n-1)   reuturn None
    quickSort(array, 0, n-1)
    print(array)

代码来源:
geeksforgeeks
视频解析(快排开始于00.40):
BiliBili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值