zoukankan      html  css  js  c++  java
  • 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()

           

       

       

       

  • 相关阅读:
    elementUI .native修饰符
    JS密码强度检测
    HighChart中的tooltip的第一行数字明显比其他的字要小
    HighChart 不同颜色(柱状图)
    .NET(C#、VB)APP开发——Smobiler平台控件介绍:SliderView控件
    .NET(C#、VB)APP开发——Smobiler平台控件介绍:SignatureButton控件
    .NET(WinCE、WM)转Android开发——Xamarin和Smobiler对比
    MobileForm控件的使用方式-用.NET(C#)开发APP的学习日志
    你用.NET开发APP时,在云平台打包APP要填个“包名”的含义
    基于.NET的APP开发和Windows开发,异步回调差别
  • 原文地址:https://www.cnblogs.com/megachen/p/11517333.html
Copyright © 2011-2022 走看看