现有一整型数组,a[8] = { 4,8,7,0,3,5,9,1},现使用堆排序的方式原地对该数组进行升序排列。那么在进行第一轮排序结束之后,数组的顺序为?

初始数组

a[8] = {4, 8, 7, 0, 3, 5, 9, 1}

构建最大堆(从最后一个非叶子节点开始)

数组看作完全二叉树:

            4
         /     \
       8         7
     /   \     /   \
    0     3   5     9
   /
  1

Step 1:堆化 index=3(0 和子节点 1)

  • 0 < 1 → 交换
            4
         /     \
       8         7
     /   \     /   \
    1     3   5     9
   /
  0

数组变为:

{4, 8, 7, 1, 3, 5, 9, 0}

Step 2:堆化 index=2(7 和子节点 5, 9)

  • 9 最大 → 交换 7 和 9
            4
         /     \
       8         9
     /   \     /   \
    1     3   5     7
   /
  0

数组变为:

{4, 8, 9, 1, 3, 5, 7, 0}

Step 3:堆化 index=0(4 和子节点 8, 9)

  • 9 最大 → 交换 4 和 9
  • 然后堆化 index=2(4 和子节点 5, 7)→ 7 最大 → 再交换
            9
         /     \
       8         7
     /   \     /   \
    1     3   5     4
   /
  0

数组变为:

{9, 8, 7, 1, 3, 5, 4, 0}

最大堆构建完成:

{9, 8, 7, 1, 3, 5, 4, 0}

Step 4:第一轮排序(交换最大值与末尾,再堆化)

  • 交换 9 与 0,堆大小变为 7
            0
         /     \
       8         7
     /   \     /   \
    1     3   5     4
  • 堆化 index=0 → 与8交换 → {8, 0, 7, 1, 3, 5, 4, 9}
  • 再堆化 index=1 → 与3交换 → {8, 3, 7, 1, 0, 5, 4, 9}
            8
         /     \
       3         7
     /   \     /   \
    1     0   5     4

第一轮后数组:

{8, 3, 7, 1, 0, 5, 4, 9}

Step 5:第二轮排序(交换堆顶8与末尾4)

  • 交换后:{4, 3, 7, 1, 0, 5, 8, 9}

堆化:

  • index=0 → 与7交换 → {7, 3, 4, 1, 0, 5, 8, 9}
  • index=2 → 与5交换 → {7, 3, 5, 1, 0, 4, 8, 9}
            7
         /     \
       3         5
     /   \     /   
    1     0   4

第二轮后数组:

{7, 3, 5, 1, 0, 4, 8, 9}

Step 6:第三轮(堆顶7与末尾4交换)

  • 交换后:{4, 3, 5, 1, 0, 7, 8, 9}
  • 堆化 index=0 → 与5交换 → {5, 3, 4, 1, 0, 7, 8, 9}
            5
         /     \
       3         4
     /   \   
    1     0

第三轮后数组:

{5, 3, 4, 1, 0, 7, 8, 9}

Step 7:第四轮(堆顶5与末尾0交换)

  • 交换后:{0, 3, 4, 1, 5, 7, 8, 9}
  • 堆化 index=0 → 与4交换 → {4, 3, 0, 1, 5, 7, 8, 9}
            4
         /     \
       3         0
     /   
    1

第四轮后数组:

{4, 3, 0, 1, 5, 7, 8, 9}

Step 8:第五轮(堆顶4与末尾1交换)

  • 交换后:{1, 3, 0, 4, 5, 7, 8, 9}
  • 堆化 index=0 → 与3交换 → {3, 1, 0, 4, 5, 7, 8, 9}
            3
         /     \
       1         0

第五轮后数组:

{3, 1, 0, 4, 5, 7, 8, 9}

Step 9:第六轮(堆顶3与末尾0交换)

  • 交换后:{0, 1, 3, 4, 5, 7, 8, 9}
  • 堆化 index=0 → 与1交换 → {1, 0, 3, 4, 5, 7, 8, 9}
            1
         /     \
       0         3

第六轮后数组:

{1, 0, 3, 4, 5, 7, 8, 9}

Step 10:第七轮(堆顶1与末尾0交换)

  • 交换后就是:
{0, 1, 3, 4, 5, 7, 8, 9}

无需再堆化,排序完成


最终升序数组:

{0, 1, 3, 4, 5, 7, 8, 9}

所以,第一轮排序结束后的数组为:

{8, 3, 7, 1, 0, 5, 4, 9}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值