`
JackyCheng2007
  • 浏览: 256415 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

堆排序 - python 实现

阅读更多
首先,了解堆的定义:堆是这样一种类似于完全二叉树的数据结构,要求双亲结点的值比子节点大(或者小)。如果是大,就叫大根堆;如果小,就是小根堆。由此,根节点一定是最大数或者最小数。
这样,算法就分为下面几个步骤:
1. 把序列整理成大根堆
2. 把大根堆的根和序列最后一个数交换
3. 把除去最后一个数后剩下的子序列再变成大根堆
4. 重复2和3直到序列的第二个数为止

那么如何把一个序列变成大根堆,这是一个递归算法,大凡树结构相关的算法,递归总是少不了的,因为树本身就是一个递归结构。假设一棵树的左右子树已经是大根堆,那么要把这棵树变成大根堆的过程就是:
1. 在根和他的左右子节点中找到最大值:
2. 如果根就是最大值,什么都不做,这已经是大根堆
3. 如果根不是最大值,就把根和最大值交换位置。
4. 把交换后的那一棵树执行1到4步。

#python heap sort
def exchange(i, j):
    x = array[i]
    array[i]=array[j]
    array[j]=x

def maxHeapify(end,i):
    l=2*i+1
    r=2*(i+1)
    max=i
    if l<end and array[i]<array[l]:
        max=l
   
    if r<end and array[max]<array[r]:
        max=r
        
    if max <> i:
        exchange(i,max)
        maxHeapify(end,max)
   
def buildMaxHeap():
    end=array.__len__()
    start=end/2-1
    for i in range(start,-1,-1):
        maxHeapify(end,i)
        
def heapSort():
    print array
    end=array.__len__()
    buildMaxHeap()
    print array
    for i in range(end-1,0,-1):
        exchange(i,0)
        maxHeapify(i,0)
        print array
    
array=[2,5,3,10,8]
heapSort()

0
0
分享到:
评论

相关推荐

    堆排序6.py 使用python实现

    堆排序6.py 使用python实现堆排序6.py 使用python实现堆排序6.py 使用python实现堆排序6.py 使用python实现堆排序6.py 使用python实现堆排序6.py 使用python实现堆排序6.py 使用python实现堆排序6.py 使用python实现...

    堆排序9.py 使用python实现

    堆排序9.py 使用python实现堆排序9.py 使用python实现堆排序9.py 使用python实现堆排序9.py 使用python实现堆排序9.py 使用python实现堆排序9.py 使用python实现堆排序9.py 使用python实现堆排序9.py 使用python实现...

    堆排序.py 使用python的代码实现

    堆排序.py 使用python的代码实现堆排序.py 使用python的代码实现堆排序.py 使用python的代码实现堆排序.py 使用python的代码实现堆排序.py 使用python的代码实现堆排序.py 使用python的代码实现堆排序.py 使用python...

    堆排序13.py 使用python代码实现

    堆排序13.py 使用python代码实现堆排序13.py 使用python代码实现堆排序13.py 使用python代码实现堆排序13.py 使用python代码实现堆排序13.py 使用python代码实现堆排序13.py 使用python代码实现堆排序13.py 使用...

    应用Java和Python分别实现堆排序算法

    堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和Python分别实现堆排序算法; 堆排序:应用Java和...

    算法图解-python,算法图解python3

    书中涵盖了经典的排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序,详细解析了它们的工作原理和实现步骤。这些排序算法各有优劣,了解它们可以帮助开发者在不同的场景下选择最合适的算法。 ...

    The Algorithms - Python算法实现

    排序算法部分,从冒泡排序到快速排序,再到归并排序和堆排序,本书对每一种排序算法都进行了细致的解析和对比分析。图算法章节中,探讨了如何在Python中实现图的遍历和最短路径问题,比如深度优先搜索(DFS)、广度...

    排序算法-python

    排序算法有很多种,比如常见的冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序、希尔排序等。每种排序算法都有自己的特点和适用场景,这需要根据实际需求来选择合适的排序方法。 对于Python语言而言,它...

    Python 应用实战-Python实现大屏数据可视化

    本篇将深入探讨如何使用Python实现大屏数据可视化的实践方法。 一、数据处理与预处理 在进行数据可视化之前,首先需要对原始数据进行处理和预处理。Python提供了许多强大的库,如Pandas,用于数据清洗、整理和分析...

    堆排序算法详解与Python实现

    最后提供了Python实现堆排序的示例代码,通过示例展示了如何使用堆排序对数组进行排序。 适用人群:具备基本编程能力的学习者或开发者,尤其是对数据结构与算法感兴趣的学生和技术爱好者。 使用场景及目标:帮助初学...

    Python实现堆排序.rar

    本资源“Python实现堆排序.rar”提供了一个用Python语言编写的堆排序实现示例,通过分析这个代码,我们可以深入理解堆排序的工作原理以及如何在Python中实现它。 堆排序是一种基于比较的排序算法,其核心思想是利用...

    Algorithm-Python-Algorithms.zip

    - 排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序等。 - 搜索算法:线性搜索、二分搜索、深度优先搜索(DFS)、广度优先搜索(BFS)。 - 动态规划(Dynamic Programming):解决最优化问题...

    03-python-数组方法-数组排序-数组形状-对角线

    Python中的数组通常通过numpy库实现,numpy提供了强大的ndarray对象。数组方法包括创建、修改和操作数组的各种功能。例如: 1. `np.array()`: 创建数组,可以指定数据类型和维度。 2. `astype()`: 将数组转换为另一...

    Python实现堆排序算法代码

    Python实现堆排序算法的代码通常包含两个主要函数:一个用于构建堆,另一个用于实际的排序过程。堆构建函数通常采用递归方式,利用父节点和子节点之间的关系来确保每个节点都满足堆的性质。排序过程则通过不断交换堆...

    Python 实现堆排序的源码及实例

    Python中的堆排序算法实现通常包括两个主要步骤:建立堆(heapify)和堆排序过程。建立堆是将一个无序的列表调整成一个最大堆(或最小堆)。堆排序过程则是通过一系列的堆顶元素与末尾元素的交换,逐步缩小堆的范围...

    通过python实现一个堆排序示例代码.zip

    压缩包内的文件名为“通过python实现一个堆排序示例代码.docx”,这意味着该文件可能是一个Word文档,它包含了使用Python语言实现堆排序算法的示例代码。文档中可能详细地解释了堆排序的原理,展示了如何使用Python...

    python-十大排序算法实现之堆排序

    python python_十大排序算法实现之堆排序

    堆排序算法详解:原理与Python实现

    堆排序的Python代码实现包含两个主要函数:`heapify`和`heapSort`。`heapify`函数是堆排序中的核心函数,用于调整以特定索引为根的子树,使其满足最大堆的性质。该函数通过递归地调整和交换节点,确保整个树的最大堆...

    各种内排序算法Python实现

    各种内排序算法,Python实现。包括:冒泡排序,选择排序,插入排序,希尔排序,快速排序,堆排序,归并排序。程序中附有测试代码及性能比较代码。

    一个简单的python实现的堆排序程序.zip

    Python实现堆排序的程序不需要导入任何外部模块,这是因为它完全依赖于Python的基本数据结构和控制流程。在Python中,可以使用列表(list)来模拟堆的数据结构,列表的索引方式非常适合实现完全二叉树的性质。对于堆...

Global site tag (gtag.js) - Google Analytics