#pragma once
#include<vector>
//调整堆
void maxHeapify(std::vector<int>& nums, int cur, int size) {
while ((2 * cur + 1) < size) {
int left = 2 * cur + 1;
int right = 2 * cur + 2;
int larger = left;
if (right<size && nums[right]>nums[left])
larger = right;
if (nums[cur] >= nums[larger])
break;
std::swap(nums[cur], nums[larger]);
cur = larger;
}
}
//建堆
void makeHeap(std::vector<int>&nums) {
int size = nums.size();
for (int cur = size / 2; cur >= 0; --cur)
maxHeapify(nums, cur, size);
}
//堆排序
void heapSort(std::vector<int>&nums) {
makeHeap(nums);
int len = nums.size();
while (len-- > 0) {
std::swap(nums[0], nums[len]);
maxHeapify(nums, 0, len);
}
}
排序算法——堆排序(C++)
最新推荐文章于 2021-11-18 00:01:58 发布