堆排序

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点(但是不保证所有左子树比右子树小反之亦然)。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:

大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;

小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;

堆排序的平均时间复杂度为 Ο(nlogn)。

算法步骤

创建一个堆 H[0……n-1];(**对非叶子节点的子节点进行调节,构建堆**)

把堆首(最大值)和堆尾互换;

把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;

重复步骤 2,直到堆的尺寸为 1。

Python 代码实现

def buildMaxHeap(arr):

import math

for i in range(math.floor(len(arr)/2),-1,-1):#构建堆由下往上构建所以用-1

heapify(arr,i)

def heapify(arr, i):

left = 2*i+1

right = 2*i+2

largest = i

if left < arrLen and arr[left] > arr[largest]:

largest = left

if right < arrLen and arr[right] > arr[largest]:

largest = right

if largest != i:

swap(arr, i, largest)

heapify(arr, largest)

def swap(arr, i, j):

arr[i], arr[j] = arr[j], arr[i]

def heapSort(arr):

global arrLen

arrLen = len(arr)

buildMaxHeap(arr)

for i in range(len(arr)-1,0,-1):

swap(arr,0,i)

arrLen -=1 #每次踢掉求出的最大值

heapify(arr, 0)

return arr

python3堆排序_python 堆排序相关推荐

  1. python中堆排序_python堆排序,详细过程图和讲解,这样做小白都会

    ### 正文前的扯淡 之前电话面试一个公司时,面试官让写一个堆排序,遗憾的是我忘了堆排序的思想了,所以直接说不会写,这次电面也以失败告终...知耻后勇,这几天在网上找了很多写堆排序的帖子,但是帖子质量 ...

  2. python堆堆乐教程_python堆排序,详细过程图和讲解,这样做小白都会

    ### 正文前的扯淡 之前电话面试一个公司时,面试官让写一个堆排序,遗憾的是我忘了堆排序的思想了,所以直接说不会写,这次电面也以失败告终...知耻后勇,这几天在网上找了很多写堆排序的帖子,但是帖子质量 ...

  3. java的堆排序_java中什么是堆排序?堆排序介绍

    本篇文章给大家带来的内容是java中什么是堆排序?堆排序介绍.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助.堆排序介绍: 堆排序可以分为两个阶段.在堆的构造阶段,我们将原始数组重新组 ...

  4. python 求和并排序_Python堆排序原理与实现方法详解

    本文实例讲述了Python堆排序原理与实现方法.分享给大家供大家参考,具体如下: 在这里要事先说明一下我也是新手,很多东西我了解不是很深入,写算法完全是锻炼自己逻辑能力同时顺带帮助读研的朋友么解决一些 ...

  5. python中堆排序_Python实现堆排序的方法详解

    本文实例讲述了Python实现堆排序的方法.分享给大家供大家参考,具体如下: 堆排序作是基本排序方法的一种,类似于合并排序而不像插入排序,它的运行时间为O(nlogn),像插入排序而不像合并排序,它是 ...

  6. python堆排序算法代码_python堆排序算法实例代码

    python 实现堆排序算法代码,需要的朋友可以参考下 代码如下:#!/usr/bin/python import sys def left_child(node): return node * 2 ...

  7. python 堆排序_堆排序用python

    Python天天美味(30) - python数据结构与算法之快速排序 快速排序的原理是将取出第一个数,将整个数组分为两波,一拨都大于这个数,另一波都小于这个数,然后递归用同样的方法处理第一波数字和第 ...

  8. 堆排序 python_堆排序用python

    Python天天美味(30) - python数据结构与算法之快速排序 快速排序的原理是将取出第一个数,将整个数组分为两波,一拨都大于这个数,另一波都小于这个数,然后递归用同样的方法处理第一波数字和第 ...

  9. 《堆排序》堆排序详解

    原文链接:https://www.cnblogs.com/chengxiao/p/6129630.html 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好 ...

最新文章

  1. 【H.264】x264命令详解:x264 --fullhelp
  2. 【译】function.caller 被认为是有害的
  3. Min_25筛有关求解次小质因子
  4. FFmpeg - 音频解码过程
  5. Linux服务器的优化
  6. 大学课程为什么不绕过51单片机直接搞STM32来做比赛
  7. 长方形旋转html5,HTML5/SVG旋转长方形来得到六边形图案
  8. 编译Windows版本ffmpeg:MingW方式失败
  9. docker CI部署样例
  10. 仿淘宝中心轮播图 JS[代码+详细讲解+效果图]
  11. 电脑无线连接打印机(DCP-1618W)
  12. 手把手教你安装JDK免安装版(简单粗暴)
  13. 半圆形进度条(vue加强版)
  14. 使用smbd实现windows和liunx的共享交互
  15. 计算机网络中型网吧规划设计,中小型网咖网络规划设计开题报告
  16. 淘宝被列入黑名单,确有其事还是另有原因
  17. iOS - 添加代码片段(Code Snippets)
  18. vue-seamless-scroll遇到一些问题
  19. linux 光功率 模块_光模块及调整光模块输入光功率的方法
  20. 质量改进实践之质量月报

热门文章

  1. POJ 3061 (二分+前缀和or尺取法)
  2. [转]Delphi 2010 3513正式版破解
  3. 什么是爱?什么是幸福?
  4. python练习笔记——面试题 F(n) = F(n-1)+F(n-2)
  5. 跟我一起写 Makefile(一)【转】
  6. Cesium学习笔记(四)Camera
  7. textContent、innerHTML、innerText、outerText、outerHTML、nodeValue使用场景和区别
  8. Highcharts X轴名称太长,如何设置下面这种样式
  9. 基础知识(9)- Swing用户界面组件
  10. countDownLatch 与 CyclicBarrier 区别