【算法导论】笔记-第六章 快速排序

第6章 快速排序

6.1 快速排序的描述

  • 过程:

    • 分解:将数组分解为数组A[p…r]分解为两个子数组A[p…q-1]和A[q+1…r],使得A[p…q-1]中每一个元素都小于等于A[q],而A[q]也小于等于A[q+1…r]中的每个元素。
    • 解决:通过递归调用快速排序,对子数组A[p…q-1]和A[q+1…r]进行排序。
    • 合并
  • 伪代码:

    • QUICKSORT(A, p, r)

      if p < r
          q = PARTITION(A, p, r)
          QUICKSORT(A, p, q-1)
          QUICKSORT(A, q+1, r)
      
    • PATITION(A, p, r)

      x = A[r]
      i = p - 1
      for j = p to r-1
          if A[j]<=x
              i = i + 1
              exchange A[i] with A[j]
      exchange A[i+1] with A[j]
      return i + 1
      
  • python代码::

    def quicksort(array):
        if len(array) < 2:
            return array
        else:
            pivot = array[0]
            less = [i for i in array[1:] if i <= pivot]
            greater = [i for i in array[1:] if i > pivot]
            return quicksort(less) + [pivot] + quicksort(greater)
    
    print(quicksort([10, 16, 4, 10, 14, 7, 9, 3, 2, 8, 1]))
    

6.2 快速排序的性能

  • 最坏情况划分:时间复杂度: θ ( n 2 ) \theta(n^2) θ(n2)
  • 最好情况划分运行时间: T ( n ) = θ ( n lg ⁡ n ) T(n)=\theta(n\lg n) T(n)=θ(nlgn)
  • 平衡的划分

6.3 快速排序的随机化版本

  • 伪代码:

    • RANDOMIZED-PARTITION(A, p, r)

      i = RANDOM(p, r)
      exchange A[r] with A[i]
      return PARTITION(A, p, r)
      
    • RANDOMIZED-QUICKSORT(A, p, r)

      if p < r
          q = RANDOMIZED-PARTITION(A, p, r)
          RANDOMIZED-QUICKSORT(A, p, q-1)
          RANDOMIZED-QUICKSORT(A, q+1, r)
      

6.4 快速排序分析

  • 最坏情况运行时间: θ ( n 2 ) \theta(n^2) θ(n2)
  • 期望运行时间: E [ X ] = O ( n lg ⁡ n ) E[X]=O(n\lg n) E[X]=O(nlgn)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

From Star.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值