堆排序分两步:1.建堆 2.交换+下滤
这么简单的算法因为用了完全二叉堆这种高级数据结构,效率达到O(n*logn)
#include<iostream> //利用STL库的现成算法进行建堆和排序
#include<vector>
#include<algorithm>
using namespace std;
int main() { //测试
vector<int> a{20, 33, 25, 32, 99, 32, 86, 99, 25, 10, 20, 99, 10, 33, 86, 19, 33, 74, 99, 32};
make_heap(a.begin(), a.end()); //建堆
sort_heap(a.begin(), a.end()); //回向量
for (auto& e : a)cout << e << ' ';
}