zoukankan      html  css  js  c++  java
  • Algs4-2.2.3快速排序中最大的元素最多交换次数

     2.3.3对于长度为N的数组,在Quick.sort()执行时,其最大的元素最多会被交换多少次?
    答:
    1)上取整((N-1)/2)次。

    2)为便于描述,令v为切分元素,M为最大元素。
    由于M在每一次切分时都将从参与切分的子数组的左边交换到右边,那么切分次数越多M被交换的次数也越多。要完成最多次的切分就需要保证每次切分后右子数组长度最长,同时要确保M不作为v元素出现或只是M在最后一次交换时为v出现(v元素只交换一次),要实现上述要求就要M在v的右边第一个位置上,并且M在后续交换后在下一个v的右边第一个位置上。那么M每次被交换最多只向右边移动两个位置,那么可供M移动的长度为N-1,在N>2的情况,一开始M在第二个位置,每次交换向右最多移动两个位置,那么 上取整(N-1)/2是最大元素的交换次数。

    3)排列:
    令N个元素的元素值如下,且有如下不等关系:
    V1a < V1<V2a< V2< V3a< V3< V4a< V4<V5a< V5< V6a< V6<…<M
    令C(N)为数组长度为N时M元素的最多交换次数的函数。
    C(0)=0
    C(1)=0

    C(2)=1
    0)M,V1
    1)V1,M(交换M)

    C(3)=1
    0)V1,M,V1a
    1)V1,V1a,M (交换M) 
    2)V1a,V1,M

    C(4)=2
    0)V1,M,V1a,V2
    1)V1,V1a,M,V2(交换M)
    2)V1a,V1,M,V2
    3)V1a,V1,V2,M(交换M)

    C(5)=2
    0)V1,M,V2,V1a,V2a
    1)V1,V1a,V2,M,V2a(交换M)
    2)V1a,V1,V2,M,V2a
    3)V1a,V1,V2,V2a,M(交换M)
    4)V1a,V1,V2a,V2,M

    C(6)=3
    0)V1,M,V2,V1a,V2a,V3
    1)V1,V1a,V2,M,V2a,V3(交换M)
    2)V1a,V1,V2,M,V2a,V3
    3)V1a,V1,V2,V2a,M,V3(交换M)
    4)V1a,V1,V2a,V2,M,V3
    5)V1a,V1,V2a,V2,V3,M(交换M)

    C(7)=3
    0)V1,M,V2,V1a,V3,V2a,V3a
    1)V1,V1a,V2,M,V3,V2a,V3a(交换M)
    2)V1a,V1,V2,M,V3,V2a,V3a
    3)V1a,V1,V2,V2a,V3,M,V3a(交换M)
    4)V1a,V1,V2a,V2,V3,M,V3a
    5)V1a,V1,V2a,V2,V3,V3a,M(交换M)
    6)V1a,V1,V2a,V2,V3a,V3,M

    C(8)=4
    0)V1,M,V2,V1a,V3,V2a,V3a,V4
    1)V1,V1a,V2,M,V3,V2a,V3a,V4(交换M)
    2)V1a,V1,V2,M,V3,V2a,V3a,V4
    4)V1a,V1,V2,V2a,V3,M,V3a,V4(交换M)
    5)V1a,V1,V2a,V2,V3,M,V3a,V4
    6)V1a,V1,V2a,V2,V3,V3a,M,V4(交换M)
    7)V1a,V1,V2a,V2,V3a,V3,M,V4
    8)V1a,V1,V2a,V2,V3a,V3,V4,M(交换M)

  • 相关阅读:
    企业微信通讯录替换-JqueryWEUI Picker替换通讯录
    页面window.onload冲突
    企业微信调试工具
    企业微信:错误码:50001 redirect_url 一例问题解决办法
    企业微信通讯录替换-Echarts中使用部门名称
    紫光拼音输入法切换中英文
    企业微信服务商平台申请
    企业微信通讯录替换-根据员工姓名查找工号
    微信开发 40001 invalid credential
    请求验证过程检测到有潜在危险的客户端输入值,对请求的处理已经中止
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860186.html
Copyright © 2011-2022 走看看