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)

  • 相关阅读:
    NXOpen测量柱面两条边的最近距离
    NXOpen打开当前部件所在目录
    NXOpen 一键移除参数
    NXOpen 特征、体、线、圆弧、点通过迭代器遍历
    NXOpen批量创建部件
    NXOpen 创建圆柱面中心线
    NXOpen创建基准座标
    NXOpen 通过迭代器获取工作部件的体、面、边、点
    NXOpen 通过部件迭代器获取已加载部件的全路径
    NXOpen 批量导出STP、IGS、DWG、DXF、PDF(五合一)
  • 原文地址:https://www.cnblogs.com/longjin2018/p/9860186.html
Copyright © 2011-2022 走看看