zoukankan      html  css  js  c++  java
  • 排序--堆排序

      堆排序的特点是利用了数据结构中的堆。

     

      从降序排列的堆中取出数据时会从最大的数据开始取,所以将取出的数据反序输出,排序就完成了。

     

     

     

     解说

      堆排序一开始需要将 n 个数据存进堆里,所需时间为 O(nlogn)。排序过程中,堆从空堆的状态开始,逐渐被数据填满。由于堆的高度小于 log2n,所以插入 1 个数据所需要的时间为 O(logn)。每轮取出最大的数据并重构堆所需要的时间为 O(logn)。由于总共有 n 轮,所以重构后排序的时间也是 O(nlogn)。因此,整体来看堆排序的时间复杂度为 O(nlogn)。这样来看,堆排序的运行时间比之前讲到的冒泡排序、选择排序、插入排序的时间O(n2) 都要短,但由于要使用堆这个相对复杂的数据结构,所以实现起来也较为困难。

    补充说明

      一般来说,需要排序的数据都存储在数组中。这次我们使用了堆这种数据结构,但实际上,这也相当于将堆嵌入到包含了序列的数组中,然后在数组中通过交换数据来进行排序。具体来说,就是让堆中的各结点和数组像下图这样呈对应关系。正如大家所见,这可以说是强行在数组中使用了堆结构。

  • 相关阅读:
    字符串-回文-Manacher算法
    字符串匹配 扩展KMP BM&Sunday
    字符串匹配-KMP
    最长上升子序列
    nginx编译安装
    nginx命令介绍
    ftp服务
    pika消息中间件模块
    multiprocessing多进程模块
    iptables详解
  • 原文地址:https://www.cnblogs.com/hzzjj/p/14897069.html
Copyright © 2011-2022 走看看