美文网首页
数据结构(三)堆排序

数据结构(三)堆排序

作者: learner222 | 来源:发表于2018-03-26 22:33 被阅读7次
# -*- coding: UTF-8 -*-


# 堆排序,一开始先构建一个大顶堆,然后循环,将最大值从第 0 个位置换到“当前最后一个位置”,再对剩余的节点进行调整,构造出一个新的大顶堆
def heap_sort(arr, size):
    build_heap(arr, size)
    for i in range(size - 1, -1, -1):
        temp = arr[0]
        arr[0] = arr[i]
        arr[i] = temp
        adjust_heap(arr, i - 1, 0)
    return arr


# 构建大顶堆,从最后一个节点开始,不断进行调整堆的操作
def build_heap(arr, size):
    for i in range(size - 1, -1, -1):
        adjust_heap(arr, size, i)


# 对指定节点的值进行调整,与左右孩子进行比较,找出最大值,替换到该节点
def adjust_heap(arr, size, i):
    left = i * 2 + 1
    right = i * 2 + 2
    max_pos = i

    if left <= size - 1 and arr[left] > arr[max_pos]:
        max_pos = left

    if right <= size - 1 and arr[right] > arr[max_pos]:
        max_pos = right

    # 当前节点的值和其左右孩子相比,不是最大的,则把最大值与当前节点值进行交换
    if max_pos != i:
        temp = arr[max_pos]
        arr[max_pos] = arr[i]
        arr[i] = temp

        # 递归对原来为最大值的节点再做一次调整
        adjust_heap(arr, size, max_pos)


# 待排序
A = [1, 2, 3, 5, 2, 3]

result = heap_sort(A, len(A))
print(result)

相关文章

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 算法与数据结构(六):堆排序

    title: 算法与数据结构(六):堆排序tags: [算法与数据结构, C语言, 堆排序]date: 2019-...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • java堆排序

    什么是堆排序:图解堆排序堆排序:利用了堆这种数据结构堆数据结构:特殊的完全二叉树,因为具有以下的特点:1)每个结点...

  • 堆排序

    hello,你好,欢迎来到堆排序!堆排序是典型的数据结构和算法的结合,首先使用数据结构记录了必要的信息,然后算法通...

  • C++基础入门之模板堆排序(上):模板上的list的创造与操作

    整段源码链接C++的模板元堆排序 要点 组建数据结构list 组建对list的各种基本操作 堆排序中组建堆排序个个...

  • python实现堆排序(HeapSort)

    python实现【堆排序】(HeapSort) 算法原理及介绍 堆排序(Heapsort)是指利用堆这种数据结构所...

  • 堆排序

    参考文章:图解排序算法(三)之堆排序 说在前面:本来对堆这种数据结构不了解,然后直接看的堆排序的介绍,看完之后一脸...

  • 堆排序

    预备知识 堆排序 堆排序(heap sort)是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的...

  • 数组-堆排序

    采用堆排序方式对数组进行排序 堆排序百科:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法.堆...

网友评论

      本文标题:数据结构(三)堆排序

      本文链接:https://www.haomeiwen.com/subject/mzudcftx.html