gpt4 book ai didi

Python实现的堆排序算法原理与用法实例分析

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Python实现的堆排序算法原理与用法实例分析由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

本文实例讲述了Python实现的堆排序算法。分享给大家供大家参考,具体如下:

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

具体代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#-*- coding: UTF-8 -*-
import numpy as np
def MakeHeap(a):
   for i in xrange (a.size / 2 - 1 , - 1 , - 1 ): #对非叶子节点的子节点进行调节,构建堆
     AdjustHeap(a, i, a.size)
def AdjustHeap(a, i, n):
   j = i * 2 + 1                     #选择节点i的左子节点
   x = a[i]                       #选择节点的数值
   while j < n:                    #循环对子节点及其子树进行调整
     if j + 1 < n and a[j + 1 ] < a[j]:    #找到节点i子节点的最小值
       j + = 1
     if a[j] > = x :                  #若两个子节点均不小于该节点,则不同调整
       break
     a[i], a[j] = a[j], a[i]             #将节点i的数值与其子节点中最小者的数值进行对调
     i = j                        #将i赋为改变的子节点的索引
     j = i * 2 + 1                   #将j赋为节点对应的左子节点
def HeapSort(a):
   MakeHeap(a)                 #构建小顶堆
   for i in xrange (a.size - 1 , 0 , - 1 ):   #对堆中的元素逆向遍历
     a[i], a[ 0 ] = a[ 0 ], a[i]           #将堆顶元素与堆中最后一个元素进行对调,因为小顶堆中堆顶元素永远最小,因此,输出即为最小元素
     AdjustHeap(a, 0 , i)          #重新调整使剩下的元素仍为一个堆
if __name__ = = '__main__' :
   a = np.random.randint( 0 , 10 , size = 10 )
   print "Before sorting..."
   print "---------------------------------------------------------------"
   print a
   print "---------------------------------------------------------------"
   HeapSort(a)
   print "After sorting..."
   print "---------------------------------------------------------------"
   print a[:: - 1 ]                    #因为堆排序按大到小进行排列,采用a[::-1]对其按从小到大进行输出
   print "---------------------------------------------------------------"

运行结果:

Python实现的堆排序算法原理与用法实例分析

希望本文所述对大家Python程序设计有所帮助.

原文链接:http://www.cnblogs.com/biaoyu/p/4831640.html 。

最后此篇关于Python实现的堆排序算法原理与用法实例分析的文章就讲到这里了,如果你想了解更多关于Python实现的堆排序算法原理与用法实例分析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com