#include <vector>
#include <iostream>
using namespace std;
//自顶向下调整
void adjust(vector<int>& a, int len, int index){
int left = 2 * index + 1;
int right = 2 * index + 2;
int maxid = index;
if (left < len && a[left] > a[maxid])
maxid = left;
if (right < len && a[right] > a[maxid])
maxid = right;
if (maxid != index){
swap(a[maxid], a[index]);
adjust(a, len, maxid);
}
}
void heapsort(vector<int>& a, int size){
//构建一个大根堆
for (int i = (size - 1)/2; i >= 0; i--){
adjust(a, size, i);
}
for (int i = size - 1; i > 0; i--){
swap(a[0], a[i]);
adjust(a, i, 0);
}
}
int main(){
vector<int> arr = { 1, 2, 5, 4, 23, 543, 13, 6, 7 };
heapsort(arr, arr.size());
for (auto i : arr){
cout << i << " ";
}
return 0;
}
c++实现一个堆排序
最新推荐文章于 2023-08-24 15:13:32 发布