c++ 堆排序
堆排序主要分为两个函数:
1、构建堆
2、元素调整
#include <iostream>
using namespace std;
void maxHeap(int tree[], int n, int i) {
if (i >= n)
return;
int lchild = i*2 + 1;
int rchild = i*2 + 2;
int max = i;
if (lchild < n && tree[lchild] > tree[max]) {
max = lchild;
}
if (rchild < n && tree[rchild] > tree[max]) {
max = rchild;
}
if (max != i) {
swap(tree[max], tree[i]);
maxHeap(tree, n, max);
}
}
void buildHeap(int tree[], int n) {
if (n < 2)
return;
int lastNode = n - 1;
int lastParent = lastNode - 1 / 2;
while (lastParent--) {
maxHeap(tree, n, lastParent);
}
}
void heapSort(int tree[], int n) {
if (n < 2)
return;
std::cout << "start build heap" << std::endl;
buildHeap(tree, n);
std::cout << "build heap succ" << std::endl;
for (int i = n-1; i >= 0; i--) {
swap(tree[0], tree[i]);
maxHeap(tree, i, 0);
}
std::cout << "heap sort succ" << std::endl;
}
int main() {
int tree[5] = {3, 5, 1, 9, 2};
heapSort(tree, 5);
for (int i=0; i < 5; i++) {
std::cout << tree[i] << std::endl;
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2020-09-02 网络 I/O复用模型:select、poll、epoll
2020-09-02 网络I/O中 同步/异步 阻塞/非阻塞 概念