
#include
#include
using namespace std;
void heapify(vector<int>& nums, int n, int i) {
int largest = i; //当前需要调整为堆结构的节点
int lson = i * 2 + 1;
int rson = i * 2 + 2;
if (lson < n && nums[lson] > nums[largest]) {
largest = lson;
}
if (rson < n && nums[rson] > nums[largest]) {
largest = rson;
}
if (largest != i) {
swap(nums[i], nums[largest]);
heapify(nums, n, largest);
}
}
void heapSort(vector<int>& nums, int n) {
//建堆
for (int i = n / 2 - 1; i >= 0; --i) {
heapify(nums, n, i); //对所有具有子节点的节点构建堆排序
}
//排序
for (int i = n - 1; i > 0; --i) {
swap(nums[i], nums[0]);
heapify(nums, i, 0); //将最大的节点换到最后一个位置,并在下次调整时不考虑
}
}
int main() {
vector<int> nums = { 1, 2, 4, 5, 3, 3, 8, 6 };
heapSort(nums, nums.size());
for (int& i : nums) cout << i << " ";
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)