#include <vector>
#include <iostream>
using namespace std;
void sink(vector<int> &arr, int i, int &end) {
int t = i;
if (i * 2 + 1 <= end && arr[i * 2 + 1] > arr[t]) t = i * 2 + 1;
if (i * 2 + 2 <= end && arr[i * 2 + 2] > arr[t]) t = i * 2 + 2;
if (i != t) {
swap(arr[i], arr[t]);
sink(arr, t, end);
}
}
void heap_sort(vector<int> &arr, int &end) {
for (int i = (end - 1) / 2; ~i; i--) sink(arr, i, end);
for (int i = 0; i < end;) {
swap(arr[0], arr[end--]);
sink(arr, 0, end);
}
}
void show(const string &msg, vector<int> &arr) {
cout << msg << ": ";
for (int num : arr) cout << num << " ";
cout << endl;
}
int main() {
vector<int> arr = {5, 2, 4, 3, 1, 9, 8, 6, 10, 7};
show("Before sorting:", arr);
int end = (int) arr.size() - 1;
heap_sort(arr, end);
show("After sorting:", arr);
return 0;
}
堆排序-C++实现
最新推荐文章于 2022-03-29 11:46:18 发布