HeapSort

  • 最大堆实现
    • 代码

      #!/usr/bin/env python

      # -*- coding: utf-8 -*-

         

      单个叶子节点进行上浮调整位置

      def float_up(arraystart):

          parent = (start - 1) // 2

          if start == 0:

              return

          if array[parent] >= array[start]:

              return

          array[parent], array[start] = array[start], array[parent]

          float_up(array, parent)

      不断的更新最后的叶子节点的下标从而确定最新的最后的叶子节点进行上浮

      def heap(arraylength):

          for start in range(length - 10, -1):

              float_up(array, start)

          return array

         

      得到最大堆之后交换顶点与末尾得到最后的排序

      def heap_sort(array):

          array = heap(array, len(array))

          for start in range(len(array) - 10, -1):

              array[start], array[0] = array[0], array[start]

              array = heap(array, start)

          return array

      def main():

          array = [6527398]

          print(heap_sort(array))

         

      if __name__ == '__main__':

          main()

         

  • 最小堆实现
    • 代码

      #!/usr/bin/env python

      # -*- coding: utf-8 -*-

         

      # maxheapsort  float up, 默认顶点就是 0, 但是 minheapsort 的最低部是长度且不是固定的因为在 sort 时会删除元素

      def sink_down(arraystartlength):

          left = start * 2 + 1

          right = start * 2 + 2

          if left > length - 1 or right > length - 1:

              return

          tmp = start

          if array[tmp] > array[left]:

              tmp = left

          if array[tmp] > array[right]:

              tmp = right

          if tmp == start:

              return

          array[tmp], array[start] = array[start], array[tmp]

          sink_down(array, tmp, length)

      def heap(arraylength):

          for start in range(length):

              sink_down(array, start, length)

          return array

      def heap_sort(array):

          array = heap(array, len(array))

          for i in range(len(array) - 10, -1):

              array[0], array[i] = array[i], array[0]

              array = heap(array, i)

          return array

      def main():

          array = [6527398]

          array = heap_sort(array)

          print(array)

      if __name__ == '__main__':

          main()

         

   

   

   

转载于:https://www.cnblogs.com/megachen/p/11517333.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值