`
JackyCheng2007
  • 浏览: 253939 次
  • 性别: 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

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

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

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

    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实现

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

    堆排序python代码.rar

    下面将详细介绍堆排序的原理、Python实现以及如何使用heapq模块。 ### 堆排序的基本概念 堆排序是一种树形选择排序,它利用完全二叉树(即每个层级除了最后一个节点外,其他节点都有两个子节点)的特性。在完全...

    堆排序.py 使用python源码实现

    堆排序 堆排序.py 使用python源码实现

    Algorithm-UVA-Solutions-in-Python.zip

    1. **排序算法**:如快速排序、归并排序、堆排序等,它们在处理大量数据时展现出高效的性能,是算法竞赛中常见的问题类型。 2. **搜索算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),常用于图遍历和树结构...

    Algorithm-learn-python.zip

    2. **排序算法**:排序是算法中的重要部分,例如冒泡排序、插入排序、选择排序、快速排序、归并排序和堆排序等。每种排序算法都有其特点和适用场景,理解它们的工作原理,可以更好地在实际问题中选择合适的方法。 3...

    各种排序算法的Python实现

    这里我们将深入探讨标题提及的七种排序算法的Python实现:冒泡排序、堆排序、归并排序、快速排序、选择排序、希尔排序以及直接插入排序。 **冒泡排序**: 冒泡排序是一种简单直观的排序算法,通过不断交换相邻的未...

    排序算法: 冒泡排序,桶排序,计数排序,堆排序,插入排序,合并排序,快速排序,基数排序,选择排序,希尔排序 Python实现

    在IT领域,排序算法是计算机科学中的核心概念,特别是在数据处理和数据分析方面。本文将详细介绍九种常见的排序...学习和理解这些排序算法的Python实现,有助于提升编程技能,更好地理解和应用这些算法于实际问题中。

    pbdlib-python-master.zip

    3. **并行计算**:"pbd"可能代表“并行数据处理”(Parallel Data Processing),因此库可能涉及多线程或多进程编程,利用Python的`multiprocessing`或`concurrent.futures`等库实现。 **分布式计算** 1. **...

    数据结构与算法-python

    - 使用`heapq`库实现最小堆,支持堆排序和优先队列功能。 4. **Python中的算法应用**: - 在图形算法中,如Dijkstra算法和Floyd-Warshall算法用于找到图中两点之间的最短路径。 - 在机器学习和数据分析中,如K-...

Global site tag (gtag.js) - Google Analytics