【分治算法】【Python实现】快速排序

因上努力

个人主页:丷从心·

系列专栏:分治算法

学习指南:算法学习指南

果上随缘


Python实现

def partition(arr, left, right):
    pivot = arr[left]

    # 将 pivot 元素移动到列表的最右边
    arr[left], arr[right] = arr[right], arr[left]

    # 通过交换操作, 将小于 pivot 的元素移动到左边, 大于 pivot 的元素移动到右边
    i = left
    for j in range(left, right):
        if arr[j] < pivot:
            arr[i], arr[j] = arr[j], arr[i]

            i += 1

    # 将 pivot 元素放置到正确的位置
    arr[i], arr[right] = arr[right], arr[i]

    return i


def quick_sort(arr, left, right):
    if left < right:
        pivot_index = partition(arr, left, right)

        quick_sort(arr, left, pivot_index - 1)
        quick_sort(arr, pivot_index + 1, right)

    return arr


arr = [3, 1, 5, 2, 4]

sorted_arr = quick_sort(arr, 0, len(arr) - 1)

print(f'sorted_arr: {sorted_arr}')
sorted_arr: [1, 2, 3, 4, 5]

时间复杂性

  • 快速排序的运行时间与划分是否对称有关,其最坏情况发生在划分过程产生的两个区域分别包含 n − 1 n - 1 n1个元素和 1 1 1个元素的时候
  • 在最好情况下,每次划分所取的基准都恰好为中值,即每次划分都产生两个大小为 n / 2 n / 2 n/2的区域
最坏时间复杂性

T ( n ) = { O ( 1 ) n ≤ 1 T ( n − 1 ) + O ( n ) n > 1 T(n) = \begin{cases} O(1) & n \leq 1 \\ T(n - 1) + O(n) & n > 1 \end{cases} T(n)={O(1)T(n1)+O(n)n1n>1

T ( n ) = n 2 T(n) = n^{2} T(n)=n2

最好时间复杂性

T ( n ) = { O ( 1 ) n ≤ 1 2 T ( n / 2 ) + O ( n ) n > 1 T(n) = \begin{cases} O(1) & n \leq 1 \\ 2 T(n / 2) + O(n) & n > 1 \end{cases} T(n)={O(1)2T(n/2)+O(n)n1n>1

T ( n ) = O ( n log ⁡ n ) T(n) = O(n \log{n}) T(n)=O(nlogn)

平均时间复杂性
  • 可以证明,快速排序算法在平均情况下的时间复杂性也是 O ( n log ⁡ n ) O(n \log{n}) O(nlogn)

  • 36
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值