ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

STL堆排序&时间复杂度分析

2022-08-06 12:43:54  阅读:209  来源: 互联网

标签:std log STL 复杂度 堆排序 pop vec heap


1. 逻辑&时间复杂度分析

pop 和 initialize 的时间复杂度请参考:
[DSAAinC++] maxHBLT的合并&初始化&时间复杂度分析

将数组初始化为一棵 max heap, 时间复杂度为 \(O(n)\).
max heap 的 root 必然是所有 node 中最大的.
排序就是利用这个性质, 将 max heap 的 root 不断 pop 出来, 存入结果数组.
每次 pop 完又会构成一个新的 max heap, 一共 pop \(n\) 次.
因此最坏情况下 pop 总步数为:

\[\sum_{i=1}^{n}{\log{i}} = \log(n!) \leq n\log{n} \]

因此时间复杂度为:

\[O(n) + O(n\log{n}) = O(n\log{n}) \]

2. 代码实现(STL)

#include <iostream>
#include <algorithm>
#include <vector>

int main()
{
    std::vector<int> vec{ 10,4,6,26,3,54,7,8,23,2 };
    std::make_heap(vec.begin(), vec.end(), std::greater<int>());
    std::sort_heap(vec.begin(), vec.end());
    for (auto i : vec) { printf("%d ", i); }
    std::cin.get();
}

Reference | Data Structures, Algoritms, and Applications in C++, Sartaj Sahni

标签:std,log,STL,复杂度,堆排序,pop,vec,heap
来源: https://www.cnblogs.com/jamesnulliu/p/algoritm_sort_heapsort.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有