加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

HeapSort

发布时间:2020-12-20 10:44:04 所属栏目:Python 来源:网络整理
导读:最大堆实现 代码 #!/usr/bin/env?python #?-*-?coding:?utf-8?-*- ? ? #? 单个叶子节点进行上浮调整位置 def ? float_up ( array ,? start ): ????parent?=?(start?-? 1 )?//? 2 ???? if ?start?==? 0 : ???????? return ???? if ?array[parent]?=?array[sta
  • 最大堆实现
    • 代码

      #!/usr/bin/env?python

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

      ? ?

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

      def?float_up(array,?start):

      ????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(array,?length):

      ????for?start?in?range(length?-?1,?0,?-1):

      ????????float_up(array,?start)

      ????return?array

      ? ?

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

      def?heap_sort(array):

      ????array?=?heap(array,?len(array))

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

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

      ????????array?=?heap(array,?start)

      ????return?array

      def?main():

      ????array?=?[6,?5,?2,?7,?3,?9,?8]

      ????print(heap_sort(array))

      ? ?

      if?__name__?==?‘__main__‘:

      ????main()

      ? ?

  • 最小堆实现
    • 代码

      #!/usr/bin/env?python

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

      ? ?

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

      def?sink_down(array,?start,?length):

      ????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[tmp]

      ????sink_down(array,?tmp,?length)

      def?heap(array,?length):

      ????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)?-?1,?-1):

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

      ????????array?=?heap(array,?i)

      ????return?array

      def?main():

      ????array?=?[6,?8]

      ????array?=?heap_sort(array)

      ????print(array)

      if?__name__?==?‘__main__‘:

      ????main()

      ? ?

? ?

? ?

? ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读