C++ 堆排序函数实现如下:
void heap_sort(vector<int> &data) {
for (int i = (int)data.size() / 2; i >= 0; i--) {
heap_adjust(data, i, (int)data.size());
}
for (int i = (int)data.size() - 1; i > 0; i--) {
swap(data[0], data[i]);
heap_adjust(data, 0, i);
}
}
void heap_adjust(vector<int> &data, int e, int length) {
int child;
for(;2 * e + 1 < length; e = child) {
child = 2 * e + 1;
if(child < length - 1 && data[child + 1] > data[child]) {
child++;
}
if(data[e] < data[child]) {
swap(data[e], data[child]);
} else {
break;
}
}
}
完整代码如下(包含main函数,头文件,测试数组):
#include <iostream>
#include <vector>
using namespace std;
//函数声明
void output_array(vector<int> &data); //输出
void heap_sort(vector<int> &data);
void heap_adjust(vector<int> &data, int e, int length);
void heap_sort(vector<int> &data) {
for (int i = (int)data.size() / 2; i >= 0; i--) {
heap_adjust(data, i, (int)data.size());
}
for (int i = (int)data.size() - 1; i > 0; i--) {
swap(data[0], data[i]);
heap_adjust(data, 0, i);
}
}
void heap_adjust(vector<int> &data, int e, int length) {
int child;
for(;2 * e + 1 < length; e = child) {
child = 2 * e + 1;
if(child < length - 1 && data[child + 1] > data[child]) {
child++;
}
if(data[e] < data[child]) {
swap(data[e], data[child]);
} else {
break;
}
}
}
void output_array(vector<int> &data) {
for(auto i : data) {
cout << i << " ";
}
cout << endl;
}
int main() {
int _data[] = {2, 4, 6, 0, 9, 8};
vector<int> data(_data, _data + 6);
heap_sort(data);
output_array(data);
return 0;
}