#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
void print_ivec(vector<int>::iterator begin, vector<int>::iterator end)
{
for(;begin != end; ++begin)
cout << *begin << '\t';
cout << endl;
}
void heapadjust(vector<int> &vec, int idx, int length)
{
int tmp = vec[idx];
int child = 2*idx+1;
while(child<length)
{
if(child+1<length&& vec[child]<vec[child+1])
child++;
if(tmp>=vec[child])
break;
vec[idx] = vec[child];
idx = child;
child = 2*child+1;
}
vec[idx] = tmp;
}
void heapsort(vector<int> &vec, int length)
{
for(int i=length-1 ; i>=0; i--)
{
int tmp = vec[0];
vec[0] = vec[i];
vec[i] = tmp;
heapadjust(vec, 0, i);
}
}
int main(int argc, char* argv[])
{
int a[] = {1, 12, 3, 2, 10, 15, 20, 30};
vector<int> vec(a, a+8);
print_ivec(vec.begin(), vec.end());
for(int i=vec.size()/2-1; i>=0; i--)
heapadjust(vec, i, vec.size());
heapsort(vec, vec.size());
print_ivec(vec.begin(), vec.end());
return 0;
}
堆排序
最新推荐文章于 2024-06-09 16:03:45 发布
本文介绍了一种使用 C++ 实现的堆排序算法。通过调整数组元素建立最大堆,并通过不断交换堆顶元素与堆尾元素并重新调整堆,最终完成数组的排序。文章提供了完整的源代码,包括初始化数组、打印数组内容、调整堆以及执行堆排序等功能。
31万+

被折叠的 条评论
为什么被折叠?



