美文网首页排序算法(python)
python实现堆排序(HeapSort)

python实现堆排序(HeapSort)

作者: 阿旭123 | 来源:发表于2020-12-08 15:00 被阅读0次

python实现【堆排序】(HeapSort)

算法原理及介绍

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法****。实质是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序**。

算法过程描述

  1. 将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;

  2. 将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无序区(R1,R2,……Rn-1)和新的有序区(Rn),且满足R[1,2…n-1]<=R[n];

  3. 由于交换后新的堆顶R[1]可能违反堆的性质,因此需要对当前无序区(R1,R2,……Rn-1)调整为新堆,然后再次将R[1]与无序区最后一个元素交换,得到新的无序区(R1,R2….Rn-2)和新的有序区(Rn-1,Rn)。不断重复此过程直到有序区的元素个数为n-1,则整个排序过程完成。

算法排序图解如下

堆排序.gif

python实现代码

def heapify(arr, n, i):
    # 构建大顶堆
    largest = i
    l = 2 * i + 1  # left = 2*i + 1
    r = 2 * i + 2  # right = 2*i + 2
    if l < n and arr[i] < arr[l]:
        largest = l
    if r < n and arr[largest] < arr[r]:
        largest = r
    if largest != i:
        arr[i], arr[largest] = arr[largest], arr[i]  # 交换
        heapify(arr, n, largest)

def heapSort(arr):
    n = len(arr)
    # 构建大顶堆
    for i in range(n, -1, -1):
        heapify(arr, n, i)
    for i in range(n - 1, 0, -1):
        # 一个个交换元素
        arr[i], arr[0] = arr[0], arr[i]  # 交换
        heapify(arr, i, 0)
    return arr

如果喜欢作者,欢迎点赞、收藏及关注,谢谢!
点击下面相应的链接即可查看各个算法的详细介绍及python实现方法

  1. 冒泡排序(BubbleSort)
  2. 选择排序(SelectionSort)
  3. 插入排序(InsertSort)
  4. 归并排序(MergeSort)
  5. 快速排序(QuickSort)
  6. 堆排序(Heap Sort)
  7. 计数排序(Count Sort)
  8. 桶排序(Bucket Sort)
  9. 基数排序(Radix Sort)
  10. 希尔排序(Shell Sort)

相关文章

  • python实现堆排序(HeapSort)

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

  • 堆排序HeapSort

    引用算法导论中对于堆排序的描述: Like merge sort,but unlike insertion sor...

  • 堆排序(HeapSort)

    与归并排序一样,但不同于插入排序的是,堆排序的时间复杂度是O(nlgn)。而与插入排序相同,但不同于归并排序的是,...

  • HeapSort堆排序

    /* @Author: sumBorn @Date: 2022-03-01 21:45:51 @Descripti...

  • 算法分析与设计复习

    1、排序算法 QuickSort 快速排序 MergeSort 归并排序 HeapSort 堆排序 BubbleS...

  • HeapSort堆排序详解

    本文我们来学习下堆排序的实现原理,堆排序顾名思义就是利用了堆的特点来实现排序,首先了解堆是什么? 堆相关的一些概念...

  • 数组-堆排序

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

  • 堆排序算法

    学号:20021211189 姓名:赵治伟 【嵌牛导读】堆排序(Heapsort)是利用二叉堆[https:/...

  • 排序算法之5:堆排序 HeapSort

    研究了半天,一步一步试验DEBU,才明白堆排序的原理,整理记录一下;相关参考:排序算法之堆排序(Heapsort)...

  • 堆排序

    一、堆排序介绍 来源百度百科: 堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它...

网友评论

    本文标题:python实现堆排序(HeapSort)

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