gpt4 book ai didi

Python实现的堆排序算法示例

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

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

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

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

堆排序的思想: 堆是一种数据结构,可以将堆看作一棵完全二叉树,这棵二叉树满足,任何一个非叶节点的值都不大于(或不小于)其左右孩子节点的值。 将一个无序序列调整为一个堆,就可以找出这个序列的最大值(或最小值),然后将找出的这个值交换到序列的最后一个,这样有序序列就元素就增加一个,无序序列元素就减少一个,对新的无序序列重复这样的操作,就实现了排序.

堆排序的执行过程:

1.从无序序列所确定的完全二叉树的第一个非叶子节点开始,从右至左,从下至上,对每个节点进行调整,最终将得到一个大顶堆.

对节点的调整方法:将当前节点(假设为a)的值与其孩子节点进行比较,如果存在大于a的值的孩子节点,则从中选出最大的一个与a交换。当a来到下一层的时候重复上述过程,直到a的孩子节点的值都小于a为止 。

2.将当前无序序列中的第一个元素(反映在数中是根节点b),与无序序列中的最后一个元素交换(假设为c),b进入有序序列,到达最终位置。无序序列元素减少1个,有序序列元素增加1个,此时只有节点c可能不满足堆的定义,对其进行调整.

3.重复2 的过程,直到无序序列的元素剩下一个时排序结束.

Python实现的堆排序算法示例

?
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# -*- coding:utf-8 -*-
# 堆排序适用于记录数很多的情况
from collections import deque
# 这里需要说明元素的存储必须要从1开始
# 涉及到左右节点的定位,和堆排序开始调整节点的定位
# 在下标0处插入0,它不参与排序
L = deque([ 49 , 38 , 65 , 97 , 76 , 13 , 27 , 49 ])
L.appendleft( 0 )
#L = [0,49,38,65,97,76,13,27,49]
def element_exchange(numbers,low,high):
   temp = numbers[low]
   # j 是low的左孩子节点(cheer!)
   i = low
   j = 2 * i
   while j< = high:
     # 如果右节点较大,则把j指向右节点
     if j<high and numbers[j]<numbers[j + 1 ]:
       j = j + 1
     if temp<numbers[j]:
       # 将numbers[j]调整到双亲节点的位置上
       numbers[i] = numbers[j]
       i = j
       j = 2 * i
     else :
       break
   # 被调整节点放入最终位置
   numbers[i] = temp
def top_heap_sort(numbers):
   length = len (numbers) - 1
   # 指定第一个进行调整的元素的下标
   # 它即该无序序列完全二叉树的第一个非叶子节点
   # 它之前的元素均要进行调整
   # cheer up!
   first_exchange_element = length / 2
   #建立初始堆
   print first_exchange_element
   for x in range (first_exchange_element):
     element_exchange(numbers,first_exchange_element - x,length)
   # 将根节点放到最终位置,剩余无序序列继续堆排序
   # length-1 次循环完成堆排序
   for y in range (length - 1 ):
     temp = numbers[ 1 ]
     numbers[ 1 ] = numbers[length - y]
     numbers[length - y] = temp
     element_exchange(numbers, 1 ,length - y - 1 )
if __name__ = = '__main__' :
   top_heap_sort(L)
   for x in range ( 1 , len (L)):
     print L[x],

运行结果:

Python实现的堆排序算法示例

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

原文链接:https://www.cnblogs.com/hoog/p/4205623.html 。

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

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